New upstream version 1.50.0
authorHilko Bengen <bengen@debian.org>
Wed, 8 Feb 2023 13:24:35 +0000 (14:24 +0100)
committerHilko Bengen <bengen@debian.org>
Wed, 8 Feb 2023 13:24:35 +0000 (14:24 +0100)
433 files changed:
.gitignore
Makefile.am
Makefile.in
README
aclocal.m4
align/Makefile.in
bash/Makefile.am
bash/Makefile.in
bash/virt-alignment-scan
bash/virt-win-reg
bugs-in-changelog.sh
build-aux/compile
build-aux/config.guess
build-aux/config.sub
build-aux/depcomp
build-aux/guestfs-test-driver
build-aux/install-sh
build-aux/ltmain.sh
build-aux/missing
build-aux/test-driver
build-aux/ylwrap
builder/Makefile.am
builder/Makefile.in
builder/builder.ml
builder/cache.ml
builder/cache.mli
builder/cmdline.ml
builder/cmdline.mli
builder/downloader.ml
builder/index.ml
builder/index.mli
builder/index_parser.ml
builder/index_parser_tests.ml
builder/ini_reader.ml
builder/ini_reader.mli
builder/languages.ml
builder/list_entries.ml
builder/paths.mli
builder/pxzcat.ml
builder/repository_main.ml
builder/repository_main.mli
builder/setlocale.ml
builder/sigchecker.ml
builder/simplestreams_parser.ml
builder/sources.ml
builder/templates/Makefile.am
builder/templates/Makefile.in
builder/templates/make-template.ml
builder/templates/validate.sh
builder/utils.ml
builder/utils.mli
builder/virt-builder-repository.pod
builder/virt-builder.pod
cat/Makefile.am
cat/Makefile.in
cat/cat.c
cat/filesystems.c
cat/log.c
cat/ls.c
cat/tail.c
cat/test-virt-cat.sh
cat/test-virt-filesystems.sh
cat/test-virt-log.sh
cat/test-virt-ls.sh
cat/virt-cat.pod
cat/virt-filesystems.pod
cat/virt-log.pod
cat/virt-ls.pod
common/.gitignore
common/edit/Makefile.in
common/mlcustomize/Makefile.am
common/mlcustomize/Makefile.in
common/mlcustomize/customize-options.pod
common/mlcustomize/customize-synopsis.pod
common/mlcustomize/customize_cmdline.ml
common/mlcustomize/customize_cmdline.mli
common/mlcustomize/firstboot.ml
common/mlcustomize/firstboot.mli
common/mlcustomize/guest_packages.ml [new file with mode: 0644]
common/mlcustomize/guest_packages.mli [new file with mode: 0644]
common/mlcustomize/inject_virtio_win.ml [new file with mode: 0644]
common/mlcustomize/inject_virtio_win.mli [new file with mode: 0644]
common/mlcustomize/test-firstboot.sh
common/mlcustomize/test-selinuxrelabel.sh
common/mldrivers/Makefile.am [new file with mode: 0644]
common/mldrivers/Makefile.in [new file with mode: 0644]
common/mldrivers/dummy.c [new file with mode: 0644]
common/mldrivers/firmware.ml [new file with mode: 0644]
common/mldrivers/firmware.mli [new file with mode: 0644]
common/mldrivers/linux.ml [new file with mode: 0644]
common/mldrivers/linux.mli [new file with mode: 0644]
common/mldrivers/linux_bootloaders.ml [new file with mode: 0644]
common/mldrivers/linux_bootloaders.mli [new file with mode: 0644]
common/mldrivers/linux_kernels.ml [new file with mode: 0644]
common/mldrivers/linux_kernels.mli [new file with mode: 0644]
common/mldrivers/windows_drivers.ml [new file with mode: 0644]
common/mldrivers/windows_drivers.mli [new file with mode: 0644]
common/mlgettext/Makefile.in
common/mlpcre/Makefile.in
common/mlpcre/PCRE.ml
common/mlpcre/PCRE.mli
common/mlpcre/pcre-c.c
common/mlpcre/pcre_tests.ml
common/mlprogress/Makefile.in
common/mlprogress/progress.mli
common/mlstdutils/Makefile.in
common/mlstdutils/std_utils.ml
common/mlstdutils/std_utils.mli
common/mltools/DOM.ml [new file with mode: 0644]
common/mltools/DOM.mli [new file with mode: 0644]
common/mltools/Makefile.am
common/mltools/Makefile.in
common/mltools/libosinfo-c.c [new file with mode: 0644]
common/mltools/libosinfo.ml [new file with mode: 0644]
common/mltools/libosinfo.mli [new file with mode: 0644]
common/mltools/libosinfo_utils.ml [new file with mode: 0644]
common/mltools/libosinfo_utils.mli [new file with mode: 0644]
common/mltools/on_exit.ml
common/mltools/on_exit.mli
common/mltools/tools_utils-c.c
common/mltools/tools_utils.ml
common/mltools/tools_utils.mli
common/mlutils/Makefile.in
common/mlvisit/Makefile.in
common/mlxml/Makefile.in
common/options/Makefile.in
common/options/decrypt.c
common/options/key-option.pod
common/options/keys.c
common/options/options.c
common/options/options.h
common/options/uri.c
common/parallel/Makefile.in
common/parallel/parallel.c
common/progress/Makefile.in
common/progress/progress.c
common/progress/progress.h
common/structs/Makefile.in
common/structs/structs-cleanups.c
common/structs/structs-cleanups.h
common/structs/structs-print.c
common/structs/structs-print.h
common/utils/Makefile.am
common/utils/Makefile.in
common/utils/environ.c [new file with mode: 0644]
common/utils/guestfs-utils.h
common/utils/utils.c
common/visit/Makefile.in
common/windows/Makefile.in
common/windows/windows.c
config.h.in
configure
configure.ac
customize/Makefile.am
customize/Makefile.in
customize/customize_cmdline.ml
customize/customize_cmdline.mli
customize/customize_main.ml
customize/customize_main.mli
customize/customize_run.ml
customize/hostname.ml
customize/hostname.mli
customize/password.ml
customize/password.mli
customize/perl_edit.ml
customize/random_seed.ml
customize/random_seed.mli
customize/test-settings.sh
customize/timezone.ml
customize/virt-customize.pod
df/Makefile.am
df/Makefile.in
df/df.c
df/main.c
df/output.c
df/test-virt-df.sh
df/virt-df.h
df/virt-df.pod
dib/Makefile.in
dib/dib.ml
dib/output_format.ml
dib/output_format.mli
dib/output_format_docker.ml
dib/output_format_qcow2.ml
dib/output_format_raw.ml
dib/output_format_tar.ml
dib/output_format_vhd.ml
diff/Makefile.in
diff/diff.c
diff/virt-diff.pod
docs/Makefile.am
docs/Makefile.in
docs/guestfs-tools-release-notes-1.48.pod
docs/guestfs-tools-release-notes-1.50.pod [new file with mode: 0644]
drivers/Makefile.am [new file with mode: 0644]
drivers/Makefile.in [new file with mode: 0644]
drivers/drivers.ml [new file with mode: 0644]
drivers/drivers.mli [new file with mode: 0644]
drivers/dummy.c [new file with mode: 0644]
drivers/expected-fedora.xml [new file with mode: 0644]
drivers/expected-windows.xml [new file with mode: 0644]
drivers/test-virt-drivers-docs.sh [new file with mode: 0755]
drivers/test-virt-drivers-linux.sh [new file with mode: 0755]
drivers/test-virt-drivers-windows.sh [new file with mode: 0755]
drivers/virt-drivers.pod [new file with mode: 0644]
edit/Makefile.am
edit/Makefile.in
edit/edit.c
edit/test-virt-edit.sh
edit/virt-edit.pod
format/Makefile.in
get-kernel/Makefile.in
get-kernel/get_kernel.ml
get-kernel/get_kernel.mli
get-kernel/virt-get-kernel.pod
gnulib/lib/Makefile.am
gnulib/lib/Makefile.in
gnulib/lib/argmatch.c
gnulib/lib/argmatch.h
gnulib/lib/bitrotate.h
gnulib/lib/c-ctype.h
gnulib/lib/error.c [new file with mode: 0644]
gnulib/lib/error.h [new file with mode: 0644]
gnulib/lib/getprogname.h
gnulib/lib/hash.c
gnulib/lib/hash.h
gnulib/lib/human.c
gnulib/lib/human.h
gnulib/lib/ignore-value.h
gnulib/lib/xalloc-oversized.h
gnulib/lib/xstrtol.c
gnulib/lib/xstrtol.h
inspector/Makefile.am
inspector/Makefile.in
inspector/expected-coreos.img.xml
inspector/expected-fedora-luks-on-lvm.img.xml
inspector/expected-fedora-lvm-on-luks.img.xml
inspector/expected-fedora.img.xml
inspector/inspector.c
inspector/test-virt-inspector-luks-on-lvm.sh
inspector/test-virt-inspector-lvm-on-luks.sh
inspector/test-virt-inspector.sh
inspector/test-xmllint.sh
inspector/virt-inspector.pod
inspector/virt-inspector.rng
lib/guestfs-internal-all.h
m4/guestfs-bash-completion.m4
m4/guestfs-c.m4
m4/guestfs-libraries.m4
m4/guestfs-misc-libraries.m4
m4/guestfs-ocaml-gettext.m4
m4/guestfs-ocaml.m4
m4/guestfs-perl.m4
m4/guestfs-progs.m4
m4/libtool.m4
m4/ltoptions.m4
m4/ltsugar.m4
m4/ltversion.m4
m4/lt~obsolete.m4
make-fs/Makefile.am
make-fs/Makefile.in
make-fs/make-fs.c
make-fs/test-virt-make-fs.sh
make-fs/virt-make-fs.pod
ocaml-dep.sh.in
ocaml-link.sh.in
po-docs/Makefile.am
po-docs/Makefile.in
po-docs/ja/Makefile.am
po-docs/ja/Makefile.in
po-docs/ja/customize-options.pod
po-docs/ja/guestfs-tools-release-notes-1.48.pod
po-docs/ja/guestfs-tools-release-notes-1.50.pod [new file with mode: 0644]
po-docs/ja/key-option.pod
po-docs/ja/sysprep-extra-options.pod
po-docs/ja/sysprep-operations.pod
po-docs/ja/virt-alignment-scan.1
po-docs/ja/virt-builder-repository.pod
po-docs/ja/virt-builder.1
po-docs/ja/virt-builder.pod
po-docs/ja/virt-cat.1
po-docs/ja/virt-cat.pod
po-docs/ja/virt-customize.1
po-docs/ja/virt-customize.pod
po-docs/ja/virt-df.1
po-docs/ja/virt-df.pod
po-docs/ja/virt-dib.1
po-docs/ja/virt-diff.1
po-docs/ja/virt-diff.pod
po-docs/ja/virt-drivers.pod [new file with mode: 0644]
po-docs/ja/virt-edit.1
po-docs/ja/virt-edit.pod
po-docs/ja/virt-filesystems.1
po-docs/ja/virt-filesystems.pod
po-docs/ja/virt-format.1
po-docs/ja/virt-get-kernel.1
po-docs/ja/virt-get-kernel.pod
po-docs/ja/virt-index-validate.1
po-docs/ja/virt-inspector.1
po-docs/ja/virt-inspector.pod
po-docs/ja/virt-log.1
po-docs/ja/virt-log.pod
po-docs/ja/virt-ls.1
po-docs/ja/virt-ls.pod
po-docs/ja/virt-make-fs.1
po-docs/ja/virt-make-fs.pod
po-docs/ja/virt-resize.1
po-docs/ja/virt-resize.pod
po-docs/ja/virt-sparsify.1
po-docs/ja/virt-sparsify.pod
po-docs/ja/virt-sysprep.1
po-docs/ja/virt-sysprep.pod
po-docs/ja/virt-win-reg.1
po-docs/language.mk
po-docs/podfiles
po-docs/uk/Makefile.am
po-docs/uk/Makefile.in
po-docs/uk/customize-options.pod
po-docs/uk/guestfs-tools-release-notes-1.48.pod
po-docs/uk/guestfs-tools-release-notes-1.50.pod [new file with mode: 0644]
po-docs/uk/key-option.pod
po-docs/uk/sysprep-extra-options.pod
po-docs/uk/sysprep-operations.pod
po-docs/uk/virt-alignment-scan.1
po-docs/uk/virt-builder-repository.pod
po-docs/uk/virt-builder.1
po-docs/uk/virt-builder.pod
po-docs/uk/virt-cat.1
po-docs/uk/virt-cat.pod
po-docs/uk/virt-customize.1
po-docs/uk/virt-customize.pod
po-docs/uk/virt-df.1
po-docs/uk/virt-df.pod
po-docs/uk/virt-dib.1
po-docs/uk/virt-diff.1
po-docs/uk/virt-diff.pod
po-docs/uk/virt-drivers.pod [new file with mode: 0644]
po-docs/uk/virt-edit.1
po-docs/uk/virt-edit.pod
po-docs/uk/virt-filesystems.1
po-docs/uk/virt-filesystems.pod
po-docs/uk/virt-format.1
po-docs/uk/virt-get-kernel.1
po-docs/uk/virt-get-kernel.pod
po-docs/uk/virt-index-validate.1
po-docs/uk/virt-inspector.1
po-docs/uk/virt-inspector.pod
po-docs/uk/virt-log.1
po-docs/uk/virt-log.pod
po-docs/uk/virt-ls.1
po-docs/uk/virt-ls.pod
po-docs/uk/virt-make-fs.1
po-docs/uk/virt-make-fs.pod
po-docs/uk/virt-resize.1
po-docs/uk/virt-resize.pod
po-docs/uk/virt-sparsify.1
po-docs/uk/virt-sparsify.pod
po-docs/uk/virt-sysprep.1
po-docs/uk/virt-sysprep.pod
po-docs/uk/virt-win-reg.1
po/Makefile.am
po/Makefile.in
po/POTFILES
po/POTFILES-ml
po/guestfs-tools.pot
podwrapper.pl.in
resize/Makefile.am
resize/Makefile.in
resize/resize.ml
resize/resize.mli
resize/test-virt-resize.pl
resize/virt-resize.pod
run.in
sparsify/Makefile.am
sparsify/Makefile.in
sparsify/cmdline.ml
sparsify/cmdline.mli
sparsify/copying.ml
sparsify/copying.mli
sparsify/in_place.ml
sparsify/in_place.mli
sparsify/sparsify.ml
sparsify/sparsify.mli
sparsify/test-virt-sparsify-in-place-fstrim-unsupported.sh
sparsify/test-virt-sparsify-in-place.sh
sparsify/utils.ml
sparsify/utils.mli
sparsify/virt-sparsify.pod
subdir-rules.mk
sysprep/Makefile.am
sysprep/Makefile.in
sysprep/main.ml
sysprep/main.mli
sysprep/sysprep_operation.ml
sysprep/sysprep_operation_backup_files.ml
sysprep/sysprep_operation_ca_certificates.ml
sysprep/sysprep_operation_ipa_client.ml
sysprep/sysprep_operation_lvm_system_devices.ml [new file with mode: 0644]
sysprep/sysprep_operation_lvm_system_devices.mli [new file with mode: 0644]
sysprep/sysprep_operation_lvm_uuids.ml
sysprep/sysprep_operation_net_hostname.ml
sysprep/sysprep_operation_net_hwaddr.ml
sysprep/sysprep_operation_net_nmconn.ml
sysprep/sysprep_operation_pacct_log.ml
sysprep/sysprep_operation_script.ml
sysprep/sysprep_operation_user_account.ml
sysprep/test-virt-sysprep-docs.sh
sysprep/test-virt-sysprep-script.sh
sysprep/test-virt-sysprep.sh
sysprep/utils.ml
sysprep/virt-sysprep.pod
test-data/Makefile.am
test-data/Makefile.in
test-data/binaries/Makefile.am
test-data/binaries/Makefile.in
test-data/blank-disks/Makefile.am
test-data/blank-disks/Makefile.in
test-data/files/Makefile.am
test-data/files/Makefile.in
test-data/phony-guests/Makefile.am
test-data/phony-guests/Makefile.in
test-data/phony-guests/fedora-db.sql.xz
test-data/phony-guests/fedora.c [new file with mode: 0644]
test-data/phony-guests/fedora.db
test-data/phony-guests/make-fedora-img.pl
test-data/phony-guests/make-windows-img.sh
test-data/phony-guests/windows-system
test-data/phony-guests/windows-system.reg
test-functions.sh
valgrind-suppressions
win-reg/Makefile.am
win-reg/Makefile.in
win-reg/virt-win-reg.in

index dc81a50452d6e6723454c3b3f48593a75ec1948b..da2a0266b5b9ccba89ce82ccd692a24272af9106 100644 (file)
@@ -32,6 +32,7 @@ Makefile.in
 /bash/virt-df
 /bash/virt-dib
 /bash/virt-diff
+/bash/virt-drivers
 /bash/virt-edit
 /bash/virt-filesystems
 /bash/virt-format
@@ -97,6 +98,8 @@ Makefile.in
 /dib/.depend
 /dib/output_format_*.mli
 /dib/virt-dib
+/drivers/.depend
+/drivers/virt-drivers
 /diff/virt-diff
 /edit/virt-edit
 /format/virt-format
@@ -156,6 +159,7 @@ Makefile.in
 /test-data/phony-guests/fedora-lvm-on-luks.img
 /test-data/phony-guests/fedora-md1.img
 /test-data/phony-guests/fedora-md2.img
+/test-data/phony-guests/fedora-static-bin
 /test-data/phony-guests/fedora.db
 /test-data/phony-guests/guests.xml
 /test-data/phony-guests/guests-all-good.xml
index c45b162c7078978984116b9ed369ecc282f92fa7..311789ed1296fc4bded070c2e61430e3dd3dc3b2 100644 (file)
@@ -1,5 +1,5 @@
 # guestfs tools
-# Copyright (C) 2009-2021 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -40,6 +40,7 @@ SUBDIRS += common/mlprogress
 SUBDIRS += common/mlvisit
 SUBDIRS += common/mlxml
 SUBDIRS += common/mltools
+SUBDIRS += common/mldrivers
 SUBDIRS += common/mlcustomize
 endif
 
@@ -54,6 +55,7 @@ if HAVE_OCAML
 # used by other OCaml tools, so these must come first.
 SUBDIRS += customize
 SUBDIRS += builder builder/templates
+SUBDIRS += drivers
 SUBDIRS += get-kernel
 SUBDIRS += resize
 SUBDIRS += sparsify
@@ -119,7 +121,7 @@ po/POTFILES: configure.ac
 po/POTFILES-ml: configure.ac
        rm -f $@ $@-t
        cd $(srcdir); \
-       find builder common/ml* customize dib get-kernel resize sparsify sysprep -name '*.ml' | \
+       find builder common/ml* customize dib drivers get-kernel resize sparsify sysprep -name '*.ml' | \
        grep -v '^builder/templates/' | \
        grep -v '^common/mlv2v/' | \
        grep -v -E '.*_tests\.ml$$' | \
index 842355810aaedf039224231094f50f7d83b7971f..c4aceb8424b9bd994b25ee9661477e740c7b7c5e 100644 (file)
@@ -15,7 +15,7 @@
 @SET_MAKE@
 
 # guestfs tools
-# Copyright (C) 2009-2021 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -129,12 +129,13 @@ host_triplet = @host@
 @HAVE_OCAML_TRUE@      common/mlpcre
 @HAVE_OCAML_TRUE@am__append_2 = common/mlgettext common/mlprogress \
 @HAVE_OCAML_TRUE@      common/mlvisit common/mlxml common/mltools \
-@HAVE_OCAML_TRUE@      common/mlcustomize
+@HAVE_OCAML_TRUE@      common/mldrivers common/mlcustomize
 
 # OCaml tools.  Note 'common/ml*' and 'customize' contain shared code
 # used by other OCaml tools, so these must come first.
 @HAVE_OCAML_TRUE@am__append_3 = customize builder builder/templates \
-@HAVE_OCAML_TRUE@      get-kernel resize sparsify sysprep dib
+@HAVE_OCAML_TRUE@      drivers get-kernel resize sparsify sysprep \
+@HAVE_OCAML_TRUE@      dib
 
 # Perl tools.
 @HAVE_TOOLS_TRUE@am__append_4 = win-reg
@@ -430,10 +431,11 @@ DIST_SUBDIRS = gnulib/lib common/utils common/structs \
        common/mlstdutils common/mlutils common/mlpcre common/edit \
        common/options common/parallel common/progress common/visit \
        common/windows common/mlgettext common/mlprogress \
-       common/mlvisit common/mlxml common/mltools common/mlcustomize \
-       test-data align cat diff df edit format inspector make-fs \
-       customize builder builder/templates get-kernel resize sparsify \
-       sysprep dib bash win-reg docs po po-docs
+       common/mlvisit common/mlxml common/mltools common/mldrivers \
+       common/mlcustomize test-data align cat diff df edit format \
+       inspector make-fs customize builder builder/templates drivers \
+       get-kernel resize sparsify sysprep dib bash win-reg docs po \
+       po-docs
 am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \
        $(srcdir)/config.sh.in $(srcdir)/ocaml-dep.sh.in \
        $(srcdir)/ocaml-link.sh.in $(srcdir)/podwrapper.pl.in \
@@ -529,7 +531,6 @@ EGREP = @EGREP@
 ETAGS = @ETAGS@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FILECMD = @FILECMD@
 GCC_VISIBILITY_HIDDEN = @GCC_VISIBILITY_HIDDEN@
 GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
 GMSGFMT = @GMSGFMT@
@@ -558,6 +559,8 @@ LIBINTL = @LIBINTL@
 LIBLZMA_CFLAGS = @LIBLZMA_CFLAGS@
 LIBLZMA_LIBS = @LIBLZMA_LIBS@
 LIBOBJS = @LIBOBJS@
+LIBOSINFO_CFLAGS = @LIBOSINFO_CFLAGS@
+LIBOSINFO_LIBS = @LIBOSINFO_LIBS@
 LIBS = @LIBS@
 LIBTINFO_CFLAGS = @LIBTINFO_CFLAGS@
 LIBTINFO_LIBS = @LIBTINFO_LIBS@
@@ -628,6 +631,7 @@ PO4A_TRANSLATE = @PO4A_TRANSLATE@
 PODWRAPPER = @PODWRAPPER@
 POSUB = @POSUB@
 RANLIB = @RANLIB@
+REALPATH = @REALPATH@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
@@ -1483,7 +1487,7 @@ po/POTFILES: configure.ac
 po/POTFILES-ml: configure.ac
        rm -f $@ $@-t
        cd $(srcdir); \
-       find builder common/ml* customize dib get-kernel resize sparsify sysprep -name '*.ml' | \
+       find builder common/ml* customize dib drivers get-kernel resize sparsify sysprep -name '*.ml' | \
        grep -v '^builder/templates/' | \
        grep -v '^common/mlv2v/' | \
        grep -v -E '.*_tests\.ml$$' | \
diff --git a/README b/README
index 3f9e45d427f126f31f42bfa17489ab3f05d36b29..47a4783a318e0ac3bf2442db3a3cc27909443397 100644 (file)
--- a/README
+++ b/README
@@ -7,7 +7,7 @@ For discussion, development, patches, etc. please use the mailing list:
 
   http://www.redhat.com/mailman/listinfo/libguestfs
 
-Copyright (C) 2009-2021 Red Hat Inc.
+Copyright (C) 2009-2023 Red Hat Inc.
 
 The programs are distributed under the GPLv2+.  Some parts are LGPLv2+
 licensed.  See individual files for license details, and COPYING and
index e7fd33780393a90068c6c685c7f91c5fa351e290..7add24f0c62cf37203fb1f15621f9a1a5d9b6123 100644 (file)
@@ -20,8 +20,8 @@ You have another version of autoconf.  It may work, but is not guaranteed to.
 If you have problems, you may need to regenerate the build system entirely.
 To do so, use the procedure documented by the package, typically 'autoreconf'.])])
 
-# gettext.m4 serial 75 (gettext-0.21.1)
-dnl Copyright (C) 1995-2014, 2016, 2018-2021 Free Software Foundation, Inc.
+# gettext.m4 serial 72 (gettext-0.21.1)
+dnl Copyright (C) 1995-2014, 2016, 2018-2020 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -42,13 +42,11 @@ dnl   Bruno Haible <haible@clisp.cons.org>, 2000-2006, 2008-2010.
 dnl Macro to add for using GNU gettext.
 
 dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]).
-dnl INTLSYMBOL must be one of 'external', 'use-libtool', 'here'.
-dnl    INTLSYMBOL should be 'external' for packages other than GNU gettext.
-dnl    It should be 'use-libtool' for the packages 'gettext-runtime' and
-dnl    'gettext-tools'.
-dnl    It should be 'here' for the package 'gettext-runtime/intl'.
-dnl    If INTLSYMBOL is 'here', then a libtool library
-dnl    $(top_builddir)/libintl.la will be created (shared and/or static,
+dnl INTLSYMBOL must be one of 'external', 'use-libtool'.
+dnl    INTLSYMBOL should be 'external' for packages other than GNU gettext, and
+dnl    'use-libtool' for the packages 'gettext-runtime' and 'gettext-tools'.
+dnl    If INTLSYMBOL is 'use-libtool', then a libtool library
+dnl    $(top_builddir)/intl/libintl.la will be created (shared and/or static,
 dnl    depending on --{enable,disable}-{shared,static} and on the presence of
 dnl    AM-DISABLE-SHARED).
 dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext
@@ -79,21 +77,24 @@ dnl
 AC_DEFUN([AM_GNU_GETTEXT],
 [
   dnl Argument checking.
-  m4_if([$1], [], , [m4_if([$1], [external], , [m4_if([$1], [use-libtool], , [m4_if([$1], [here], ,
+  m4_if([$1], [], , [m4_if([$1], [external], , [m4_if([$1], [use-libtool], ,
     [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT
-])])])])])
+])])])])
   m4_if(m4_if([$1], [], [old])[]m4_if([$1], [no-libtool], [old]), [old],
     [errprint([ERROR: Use of AM_GNU_GETTEXT without [external] argument is no longer supported.
 ])])
   m4_if([$2], [], , [m4_if([$2], [need-ngettext], , [m4_if([$2], [need-formatstring-macros], ,
     [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT
 ])])])])
-  define([gt_building_libintl_in_same_build_tree],
-    m4_if([$1], [use-libtool], [yes], [m4_if([$1], [here], [yes], [no])]))
+  define([gt_included_intl],
+    m4_if([$1], [external], [no], [yes]))
   gt_NEEDS_INIT
   AM_GNU_GETTEXT_NEED([$2])
 
   AC_REQUIRE([AM_PO_SUBDIRS])dnl
+  m4_if(gt_included_intl, yes, [
+    AC_REQUIRE([AM_INTL_SUBDIR])dnl
+  ])
 
   dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
   AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
@@ -103,13 +104,13 @@ AC_DEFUN([AM_GNU_GETTEXT],
   dnl Ideally we would do this search only after the
   dnl      if test "$USE_NLS" = "yes"; then
   dnl        if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
-  dnl tests. But if configure.ac invokes AM_ICONV after AM_GNU_GETTEXT
+  dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT
   dnl the configure script would need to contain the same shell code
   dnl again, outside any 'if'. There are two solutions:
   dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'.
   dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE.
   dnl Since AC_PROVIDE_IFELSE is not documented, we avoid it.
-  m4_if(gt_building_libintl_in_same_build_tree, yes, , [
+  m4_if(gt_included_intl, yes, , [
     AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
   ])
 
@@ -119,7 +120,8 @@ AC_DEFUN([AM_GNU_GETTEXT],
   dnl Set USE_NLS.
   AC_REQUIRE([AM_NLS])
 
-  m4_if(gt_building_libintl_in_same_build_tree, yes, [
+  m4_if(gt_included_intl, yes, [
+    BUILD_INCLUDED_LIBINTL=no
     USE_INCLUDED_LIBINTL=no
   ])
   LIBINTL=
@@ -138,7 +140,7 @@ AC_DEFUN([AM_GNU_GETTEXT],
   dnl If we use NLS figure out what method
   if test "$USE_NLS" = "yes"; then
     gt_use_preinstalled_gnugettext=no
-    m4_if(gt_building_libintl_in_same_build_tree, yes, [
+    m4_if(gt_included_intl, yes, [
       AC_MSG_CHECKING([whether included gettext is requested])
       AC_ARG_WITH([included-gettext],
         [  --with-included-gettext use the GNU gettext library included here],
@@ -194,7 +196,7 @@ return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION
 
         if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
           dnl Sometimes libintl requires libiconv, so first search for libiconv.
-          m4_if(gt_building_libintl_in_same_build_tree, yes, , [
+          m4_if(gt_included_intl, yes, , [
             AM_ICONV_LINK
           ])
           dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL
@@ -272,8 +274,7 @@ return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION
         if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \
            || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \
                 && test "$PACKAGE" != gettext-runtime \
-                && test "$PACKAGE" != gettext-tools \
-                && test "$PACKAGE" != libintl; }; then
+                && test "$PACKAGE" != gettext-tools; }; then
           gt_use_preinstalled_gnugettext=yes
         else
           dnl Reset the values set by searching for libintl.
@@ -282,7 +283,7 @@ return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION
           INCINTL=
         fi
 
-    m4_if(gt_building_libintl_in_same_build_tree, yes, [
+    m4_if(gt_included_intl, yes, [
         if test "$gt_use_preinstalled_gnugettext" != "yes"; then
           dnl GNU gettext is not found in the C library.
           dnl Fall back on included GNU gettext library.
@@ -292,6 +293,7 @@ return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION
 
       if test "$nls_cv_use_gnu_gettext" = "yes"; then
         dnl Mark actions used to generate GNU NLS library.
+        BUILD_INCLUDED_LIBINTL=yes
         USE_INCLUDED_LIBINTL=yes
         LIBINTL="m4_if([$3],[],\${top_builddir}/intl,[$3])/libintl.la $LIBICONV $LIBTHREAD"
         LTLIBINTL="m4_if([$3],[],\${top_builddir}/intl,[$3])/libintl.la $LTLIBICONV $LTLIBTHREAD"
@@ -361,17 +363,20 @@ return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION
     POSUB=po
   fi
 
-  m4_if(gt_building_libintl_in_same_build_tree, yes, [
+  m4_if(gt_included_intl, yes, [
+    dnl In GNU gettext we have to set BUILD_INCLUDED_LIBINTL to 'yes'
+    dnl because some of the testsuite requires it.
+    BUILD_INCLUDED_LIBINTL=yes
+
     dnl Make all variables we use known to autoconf.
+    AC_SUBST([BUILD_INCLUDED_LIBINTL])
     AC_SUBST([USE_INCLUDED_LIBINTL])
     AC_SUBST([CATOBJEXT])
   ])
 
-  m4_if(gt_building_libintl_in_same_build_tree, yes, [], [
-    dnl For backward compatibility. Some Makefiles may be using this.
-    INTLLIBS="$LIBINTL"
-    AC_SUBST([INTLLIBS])
-  ])
+  dnl For backward compatibility. Some Makefiles may be using this.
+  INTLLIBS="$LIBINTL"
+  AC_SUBST([INTLLIBS])
 
   dnl Make all documented variables known to autoconf.
   AC_SUBST([LIBINTL])
@@ -1600,7 +1605,7 @@ fi
 AC_LIB_PROG_LD_GNU
 ])
 
-# lib-link.m4 serial 32
+# lib-link.m4 serial 33
 dnl Copyright (C) 2001-2022 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -1798,8 +1803,8 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
     eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\"
   ])
   AC_ARG_WITH(PACK[-prefix],
-[[  --with-]]PACK[[-prefix[=DIR]  search for ]PACKLIBS[ in DIR/include and DIR/lib
-  --without-]]PACK[[-prefix     don't search for ]PACKLIBS[ in includedir and libdir]],
+[[  --with-]]PACK[[-prefix[=DIR]  search for ]]PACKLIBS[[ in DIR/include and DIR/lib
+  --without-]]PACK[[-prefix     don't search for ]]PACKLIBS[[ in includedir and libdir]],
 [
     if test "X$withval" = "Xno"; then
       use_additional=no
@@ -3116,7 +3121,7 @@ AS_IF([test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"],
 ])dnl PKG_HAVE_DEFINE_WITH_MODULES
 
 # po.m4 serial 32 (gettext-0.21.1)
-dnl Copyright (C) 1995-2014, 2016, 2018-2020 Free Software Foundation, Inc.
+dnl Copyright (C) 1995-2014, 2016, 2018-2022 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index 3ca655cbe7fdbe2e7767a086075476699822257e..3ea557dd6277515738936b1108d414e8acc6eb46 100644 (file)
@@ -32,7 +32,7 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -493,7 +493,6 @@ EGREP = @EGREP@
 ETAGS = @ETAGS@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FILECMD = @FILECMD@
 GCC_VISIBILITY_HIDDEN = @GCC_VISIBILITY_HIDDEN@
 GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
 GMSGFMT = @GMSGFMT@
@@ -522,6 +521,8 @@ LIBINTL = @LIBINTL@
 LIBLZMA_CFLAGS = @LIBLZMA_CFLAGS@
 LIBLZMA_LIBS = @LIBLZMA_LIBS@
 LIBOBJS = @LIBOBJS@
+LIBOSINFO_CFLAGS = @LIBOSINFO_CFLAGS@
+LIBOSINFO_LIBS = @LIBOSINFO_LIBS@
 LIBS = @LIBS@
 LIBTINFO_CFLAGS = @LIBTINFO_CFLAGS@
 LIBTINFO_LIBS = @LIBTINFO_LIBS@
@@ -592,6 +593,7 @@ PO4A_TRANSLATE = @PO4A_TRANSLATE@
 PODWRAPPER = @PODWRAPPER@
 POSUB = @POSUB@
 RANLIB = @RANLIB@
+REALPATH = @REALPATH@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
index 4e5a20e436e8dfc284bde794e102deffa5f21ece..000fab5eb89875deb259323647d9e6914699be84 100644 (file)
@@ -1,5 +1,5 @@
 # libguestfs
-# Copyright (C) 2013-2020 Red Hat Inc.
+# Copyright (C) 2013-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -29,6 +29,7 @@ symlinks = \
        virt-diff \
        virt-df \
        virt-dib \
+       virt-drivers \
        virt-edit \
        virt-filesystems \
        virt-format \
@@ -54,7 +55,7 @@ CLEANFILES += \
 # common options like -d is handled by this common script.  However
 # this script cannot deal with commands that use --ro/--rw
 # (eg. virt-rescue).  Those tools have to be handled individually.
-virt-builder virt-cat virt-customize virt-df virt-dib virt-diff \
+virt-builder virt-cat virt-customize virt-df virt-dib virt-diff virt-drivers \
 virt-edit virt-filesystems virt-format virt-get-kernel virt-inspector \
 virt-log virt-ls \
 virt-resize virt-sparsify virt-sysprep \
index bdbf903c72b2291f493d8ce3cbf0517223095ea6..2a152732170d79a5bc62a766ddfc86a1d517a734 100644 (file)
@@ -15,7 +15,7 @@
 @SET_MAKE@
 
 # libguestfs
-# Copyright (C) 2013-2020 Red Hat Inc.
+# Copyright (C) 2013-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -32,7 +32,7 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -424,7 +424,6 @@ EGREP = @EGREP@
 ETAGS = @ETAGS@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FILECMD = @FILECMD@
 GCC_VISIBILITY_HIDDEN = @GCC_VISIBILITY_HIDDEN@
 GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
 GMSGFMT = @GMSGFMT@
@@ -453,6 +452,8 @@ LIBINTL = @LIBINTL@
 LIBLZMA_CFLAGS = @LIBLZMA_CFLAGS@
 LIBLZMA_LIBS = @LIBLZMA_LIBS@
 LIBOBJS = @LIBOBJS@
+LIBOSINFO_CFLAGS = @LIBOSINFO_CFLAGS@
+LIBOSINFO_LIBS = @LIBOSINFO_LIBS@
 LIBS = @LIBS@
 LIBTINFO_CFLAGS = @LIBTINFO_CFLAGS@
 LIBTINFO_LIBS = @LIBTINFO_LIBS@
@@ -523,6 +524,7 @@ PO4A_TRANSLATE = @PO4A_TRANSLATE@
 PODWRAPPER = @PODWRAPPER@
 POSUB = @POSUB@
 RANLIB = @RANLIB@
+REALPATH = @REALPATH@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
@@ -676,6 +678,7 @@ symlinks = \
        virt-diff \
        virt-df \
        virt-dib \
+       virt-drivers \
        virt-edit \
        virt-filesystems \
        virt-format \
@@ -1133,7 +1136,7 @@ export TEST_FUNCTIONS := \
 # common options like -d is handled by this common script.  However
 # this script cannot deal with commands that use --ro/--rw
 # (eg. virt-rescue).  Those tools have to be handled individually.
-virt-builder virt-cat virt-customize virt-df virt-dib virt-diff \
+virt-builder virt-cat virt-customize virt-df virt-dib virt-diff virt-drivers \
 virt-edit virt-filesystems virt-format virt-get-kernel virt-inspector \
 virt-log virt-ls \
 virt-resize virt-sparsify virt-sysprep \
index 17d883de266e4016a3cb622e1169f8393664bed3..b93a00118fa0557508cdb3aea9195e5109b79972 100644 (file)
@@ -1,5 +1,5 @@
 # virt-tools bash completion script -*- shell-script -*-
-# Copyright (C) 2010-2021 Red Hat Inc.
+# Copyright (C) 2010-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -127,6 +127,12 @@ _virt_diff ()
 } &&
 complete -o default -F _virt_diff virt-diff
 
+_virt_drivers ()
+{
+    _guestfs_virttools "virt-drivers" 1
+} &&
+complete -o default -F _virt_drivers virt-drivers
+
 _virt_edit ()
 {
     _guestfs_virttools "virt-edit" 0
index dce91bbcc9893ca1f5456c46e9c8482d3f6038fe..1d1d60c94a79db49c11e9a7bf70c270b61e24720 100644 (file)
@@ -1,5 +1,5 @@
 # libguestfs-test-tool bash completion script -*- shell-script -*-
-# Copyright (C) 2014-2020 Red Hat Inc.
+# Copyright (C) 2014-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index 52430e5c52d1473b6e0f6ed69449db5f2b4b4123..2428c3f16fe30836b48b134c060bb670dc032c2f 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/bash -
 # bugs-in-changelog.sh
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index df363c8fbfbcbba9df21d8c9455b58c038697b61..23fcba011321a3a2b3b94a8abb13201dbdd1faa5 100755 (executable)
@@ -3,7 +3,7 @@
 
 scriptversion=2018-03-07.03; # UTC
 
-# Copyright (C) 1999-2021 Free Software Foundation, Inc.
+# Copyright (C) 1999-2020 Free Software Foundation, Inc.
 # Written by Tom Tromey <tromey@cygnus.com>.
 #
 # This program is free software; you can redistribute it and/or modify
index 7ea49fadcd8b4de01b0415ddc09ca1be323d6ede..b33c9e890e0c7c0acb1dbc9058f4be70e0a8f10f 100755 (executable)
@@ -1,8 +1,8 @@
-#!/usr/bin/sh
+#! /bin/sh
 # Attempt to guess a canonical system name.
-#   Copyright 1992-2016 Free Software Foundation, Inc.
+#   Copyright 1992-2018 Free Software Foundation, Inc.
 
-timestamp='2016-10-02'
+timestamp='2018-08-29'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -15,7 +15,7 @@ timestamp='2016-10-02'
 # General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# along with this program; if not, see <https://www.gnu.org/licenses/>.
 #
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
@@ -27,7 +27,7 @@ timestamp='2016-10-02'
 # Originally written by Per Bothner; maintained since 2000 by Ben Elliston.
 #
 # You can get the latest version of this script from:
-# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
+# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
 #
 # Please send patches to <config-patches@gnu.org>.
 
@@ -39,7 +39,7 @@ Usage: $0 [OPTION]
 
 Output the configuration name of the system \`$me' is run on.
 
-Operation modes:
+Options:
   -h, --help         print this help, then exit
   -t, --time-stamp   print date of last modification, then exit
   -v, --version      print version number, then exit
@@ -50,7 +50,7 @@ version="\
 GNU config.guess ($timestamp)
 
 Originally written by Per Bothner.
-Copyright 1992-2016 Free Software Foundation, Inc.
+Copyright 1992-2018 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -84,8 +84,6 @@ if test $# != 0; then
   exit 1
 fi
 
-trap 'exit 1' 1 2 15
-
 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a
 # compiler to aid in system detection is discouraged as it requires
 # temporary files to be created and, as you can see below, it is a
@@ -96,34 +94,39 @@ trap 'exit 1' 1 2 15
 
 # Portable tmp directory creation inspired by the Autoconf team.
 
-set_cc_for_build='
-trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
-trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
-: ${TMPDIR=/tmp} ;
- { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
- { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
- { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
- { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
-dummy=$tmp/dummy ;
-tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
-case $CC_FOR_BUILD,$HOST_CC,$CC in
- ,,)    echo "int x;" > $dummy.c ;
-       for c in cc gcc c89 c99 ; do
-         if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
-            CC_FOR_BUILD="$c"; break ;
-         fi ;
-       done ;
-       if test x"$CC_FOR_BUILD" = x ; then
-         CC_FOR_BUILD=no_compiler_found ;
-       fi
-       ;;
- ,,*)   CC_FOR_BUILD=$CC ;;
- ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
-esac ; set_cc_for_build= ;'
+tmp=
+# shellcheck disable=SC2172
+trap 'test -z "$tmp" || rm -fr "$tmp"' 1 2 13 15
+trap 'exitcode=$?; test -z "$tmp" || rm -fr "$tmp"; exit $exitcode' 0
+
+set_cc_for_build() {
+    : "${TMPDIR=/tmp}"
+    # shellcheck disable=SC2039
+    { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+       { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } ||
+       { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+       { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; }
+    dummy=$tmp/dummy
+    case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in
+       ,,)    echo "int x;" > "$dummy.c"
+              for driver in cc gcc c89 c99 ; do
+                  if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then
+                      CC_FOR_BUILD="$driver"
+                      break
+                  fi
+              done
+              if test x"$CC_FOR_BUILD" = x ; then
+                  CC_FOR_BUILD=no_compiler_found
+              fi
+              ;;
+       ,,*)   CC_FOR_BUILD=$CC ;;
+       ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
+    esac
+}
 
 # This is needed to find uname on a Pyramid OSx when run in the BSD universe.
 # (ghazi@noc.rutgers.edu 1994-08-24)
-if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+if test -f /.attbin/uname ; then
        PATH=$PATH:/.attbin ; export PATH
 fi
 
@@ -132,14 +135,14 @@ UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
 UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
 UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
 
-case "${UNAME_SYSTEM}" in
+case "$UNAME_SYSTEM" in
 Linux|GNU|GNU/*)
        # If the system lacks a compiler, then just pick glibc.
        # We could probably try harder.
        LIBC=gnu
 
-       eval $set_cc_for_build
-       cat <<-EOF > $dummy.c
+       set_cc_for_build
+       cat <<-EOF > "$dummy.c"
        #include <features.h>
        #if defined(__UCLIBC__)
        LIBC=uclibc
@@ -149,13 +152,20 @@ Linux|GNU|GNU/*)
        LIBC=gnu
        #endif
        EOF
-       eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`
+       eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`"
+
+       # If ldd exists, use it to detect musl libc.
+       if command -v ldd >/dev/null && \
+               ldd --version 2>&1 | grep -q ^musl
+       then
+           LIBC=musl
+       fi
        ;;
 esac
 
 # Note: order is significant - the case branches are not exclusive.
 
-case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
     *:NetBSD:*:*)
        # NetBSD (nbsd) targets should (where applicable) match one or
        # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
@@ -169,30 +179,30 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
        # portion of the name.  We always set it to "unknown".
        sysctl="sysctl -n hw.machine_arch"
        UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \
-           /sbin/$sysctl 2>/dev/null || \
-           /usr/sbin/$sysctl 2>/dev/null || \
+           "/sbin/$sysctl" 2>/dev/null || \
+           "/usr/sbin/$sysctl" 2>/dev/null || \
            echo unknown)`
-       case "${UNAME_MACHINE_ARCH}" in
+       case "$UNAME_MACHINE_ARCH" in
            armeb) machine=armeb-unknown ;;
            arm*) machine=arm-unknown ;;
            sh3el) machine=shl-unknown ;;
            sh3eb) machine=sh-unknown ;;
            sh5el) machine=sh5le-unknown ;;
            earmv*)
-               arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
-               endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'`
-               machine=${arch}${endian}-unknown
+               arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
+               endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'`
+               machine="${arch}${endian}"-unknown
                ;;
-           *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+           *) machine="$UNAME_MACHINE_ARCH"-unknown ;;
        esac
        # The Operating System including object format, if it has switched
        # to ELF recently (or will in the future) and ABI.
-       case "${UNAME_MACHINE_ARCH}" in
+       case "$UNAME_MACHINE_ARCH" in
            earm*)
                os=netbsdelf
                ;;
            arm*|i386|m68k|ns32k|sh3*|sparc|vax)
-               eval $set_cc_for_build
+               set_cc_for_build
                if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
                        | grep -q __ELF__
                then
@@ -208,10 +218,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
                ;;
        esac
        # Determine ABI tags.
-       case "${UNAME_MACHINE_ARCH}" in
+       case "$UNAME_MACHINE_ARCH" in
            earm*)
                expr='s/^earmv[0-9]/-eabi/;s/eb$//'
-               abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"`
+               abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"`
                ;;
        esac
        # The OS release
@@ -219,46 +229,55 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
        # thus, need a distinct triplet. However, they do not need
        # kernel version information, so it can be replaced with a
        # suitable tag, in the style of linux-gnu.
-       case "${UNAME_VERSION}" in
+       case "$UNAME_VERSION" in
            Debian*)
                release='-gnu'
                ;;
            *)
-               release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2`
+               release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2`
                ;;
        esac
        # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
        # contains redundant information, the shorter form:
        # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
-       echo "${machine}-${os}${release}${abi}"
+       echo "$machine-${os}${release}${abi-}"
        exit ;;
     *:Bitrig:*:*)
        UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
-       echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE}
+       echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE"
        exit ;;
     *:OpenBSD:*:*)
        UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
-       echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
+       echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE"
        exit ;;
     *:LibertyBSD:*:*)
        UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'`
-       echo ${UNAME_MACHINE_ARCH}-unknown-libertybsd${UNAME_RELEASE}
+       echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE"
+       exit ;;
+    *:MidnightBSD:*:*)
+       echo "$UNAME_MACHINE"-unknown-midnightbsd"$UNAME_RELEASE"
        exit ;;
     *:ekkoBSD:*:*)
-       echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+       echo "$UNAME_MACHINE"-unknown-ekkobsd"$UNAME_RELEASE"
        exit ;;
     *:SolidBSD:*:*)
-       echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
+       echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE"
        exit ;;
     macppc:MirBSD:*:*)
-       echo powerpc-unknown-mirbsd${UNAME_RELEASE}
+       echo powerpc-unknown-mirbsd"$UNAME_RELEASE"
        exit ;;
     *:MirBSD:*:*)
-       echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+       echo "$UNAME_MACHINE"-unknown-mirbsd"$UNAME_RELEASE"
        exit ;;
     *:Sortix:*:*)
-       echo ${UNAME_MACHINE}-unknown-sortix
+       echo "$UNAME_MACHINE"-unknown-sortix
        exit ;;
+    *:Redox:*:*)
+       echo "$UNAME_MACHINE"-unknown-redox
+       exit ;;
+    mips:OSF1:*.*)
+        echo mips-dec-osf1
+        exit ;;
     alpha:OSF1:*:*)
        case $UNAME_RELEASE in
        *4.0)
@@ -310,28 +329,19 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
        # A Tn.n version is a released field test version.
        # A Xn.n version is an unreleased experimental baselevel.
        # 1.2 uses "1.2" for uname -r.
-       echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
+       echo "$UNAME_MACHINE"-dec-osf"`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`"
        # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
        exitcode=$?
        trap '' 0
        exit $exitcode ;;
-    Alpha\ *:Windows_NT*:*)
-       # How do we know it's Interix rather than the generic POSIX subsystem?
-       # Should we change UNAME_MACHINE based on the output of uname instead
-       # of the specific Alpha model?
-       echo alpha-pc-interix
-       exit ;;
-    21064:Windows_NT:50:3)
-       echo alpha-dec-winnt3.5
-       exit ;;
     Amiga*:UNIX_System_V:4.0:*)
        echo m68k-unknown-sysv4
        exit ;;
     *:[Aa]miga[Oo][Ss]:*:*)
-       echo ${UNAME_MACHINE}-unknown-amigaos
+       echo "$UNAME_MACHINE"-unknown-amigaos
        exit ;;
     *:[Mm]orph[Oo][Ss]:*:*)
-       echo ${UNAME_MACHINE}-unknown-morphos
+       echo "$UNAME_MACHINE"-unknown-morphos
        exit ;;
     *:OS/390:*:*)
        echo i370-ibm-openedition
@@ -343,7 +353,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
        echo powerpc-ibm-os400
        exit ;;
     arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
-       echo arm-acorn-riscix${UNAME_RELEASE}
+       echo arm-acorn-riscix"$UNAME_RELEASE"
        exit ;;
     arm*:riscos:*:*|arm*:RISCOS:*:*)
        echo arm-unknown-riscos
@@ -370,38 +380,33 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
            sparc) echo sparc-icl-nx7; exit ;;
        esac ;;
     s390x:SunOS:*:*)
-       echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       echo "$UNAME_MACHINE"-ibm-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`"
        exit ;;
     sun4H:SunOS:5.*:*)
-       echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       echo sparc-hal-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
        exit ;;
     sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
-       echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       echo sparc-sun-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`"
        exit ;;
     i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
-       echo i386-pc-auroraux${UNAME_RELEASE}
+       echo i386-pc-auroraux"$UNAME_RELEASE"
        exit ;;
     i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
-       eval $set_cc_for_build
-       SUN_ARCH=i386
-       # If there is a compiler, see if it is configured for 64-bit objects.
-       # Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
-       # This test works for both compilers.
-       if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
-           if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
-               (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
-               grep IS_64BIT_ARCH >/dev/null
-           then
-               SUN_ARCH=x86_64
-           fi
-       fi
-       echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       UNAME_REL="`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`"
+       case `isainfo -b` in
+           32)
+               echo i386-pc-solaris2"$UNAME_REL"
+               ;;
+           64)
+               echo x86_64-pc-solaris2"$UNAME_REL"
+               ;;
+       esac
        exit ;;
     sun4*:SunOS:6*:*)
        # According to config.sub, this is the proper way to canonicalize
        # SunOS6.  Hard to guess exactly what SunOS6 will be like, but
        # it's likely to be more like Solaris than SunOS4.
-       echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       echo sparc-sun-solaris3"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
        exit ;;
     sun4*:SunOS:*:*)
        case "`/usr/bin/arch -k`" in
@@ -410,25 +415,25 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
                ;;
        esac
        # Japanese Language versions have a version number like `4.1.3-JL'.
-       echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+       echo sparc-sun-sunos"`echo "$UNAME_RELEASE"|sed -e 's/-/_/'`"
        exit ;;
     sun3*:SunOS:*:*)
-       echo m68k-sun-sunos${UNAME_RELEASE}
+       echo m68k-sun-sunos"$UNAME_RELEASE"
        exit ;;
     sun*:*:4.2BSD:*)
        UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
-       test "x${UNAME_RELEASE}" = x && UNAME_RELEASE=3
+       test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3
        case "`/bin/arch`" in
            sun3)
-               echo m68k-sun-sunos${UNAME_RELEASE}
+               echo m68k-sun-sunos"$UNAME_RELEASE"
                ;;
            sun4)
-               echo sparc-sun-sunos${UNAME_RELEASE}
+               echo sparc-sun-sunos"$UNAME_RELEASE"
                ;;
        esac
        exit ;;
     aushp:SunOS:*:*)
-       echo sparc-auspex-sunos${UNAME_RELEASE}
+       echo sparc-auspex-sunos"$UNAME_RELEASE"
        exit ;;
     # The situation for MiNT is a little confusing.  The machine name
     # can be virtually everything (everything which is not
@@ -439,44 +444,44 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
     # MiNT.  But MiNT is downward compatible to TOS, so this should
     # be no problem.
     atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
-       echo m68k-atari-mint${UNAME_RELEASE}
+       echo m68k-atari-mint"$UNAME_RELEASE"
        exit ;;
     atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
-       echo m68k-atari-mint${UNAME_RELEASE}
+       echo m68k-atari-mint"$UNAME_RELEASE"
        exit ;;
     *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
-       echo m68k-atari-mint${UNAME_RELEASE}
+       echo m68k-atari-mint"$UNAME_RELEASE"
        exit ;;
     milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
-       echo m68k-milan-mint${UNAME_RELEASE}
+       echo m68k-milan-mint"$UNAME_RELEASE"
        exit ;;
     hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
-       echo m68k-hades-mint${UNAME_RELEASE}
+       echo m68k-hades-mint"$UNAME_RELEASE"
        exit ;;
     *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
-       echo m68k-unknown-mint${UNAME_RELEASE}
+       echo m68k-unknown-mint"$UNAME_RELEASE"
        exit ;;
     m68k:machten:*:*)
-       echo m68k-apple-machten${UNAME_RELEASE}
+       echo m68k-apple-machten"$UNAME_RELEASE"
        exit ;;
     powerpc:machten:*:*)
-       echo powerpc-apple-machten${UNAME_RELEASE}
+       echo powerpc-apple-machten"$UNAME_RELEASE"
        exit ;;
     RISC*:Mach:*:*)
        echo mips-dec-mach_bsd4.3
        exit ;;
     RISC*:ULTRIX:*:*)
-       echo mips-dec-ultrix${UNAME_RELEASE}
+       echo mips-dec-ultrix"$UNAME_RELEASE"
        exit ;;
     VAX*:ULTRIX*:*:*)
-       echo vax-dec-ultrix${UNAME_RELEASE}
+       echo vax-dec-ultrix"$UNAME_RELEASE"
        exit ;;
     2020:CLIX:*:* | 2430:CLIX:*:*)
-       echo clipper-intergraph-clix${UNAME_RELEASE}
+       echo clipper-intergraph-clix"$UNAME_RELEASE"
        exit ;;
     mips:*:*:UMIPS | mips:*:*:RISCos)
-       eval $set_cc_for_build
-       sed 's/^        //' << EOF >$dummy.c
+       set_cc_for_build
+       sed 's/^        //' << EOF > "$dummy.c"
 #ifdef __cplusplus
 #include <stdio.h>  /* for printf() prototype */
        int main (int argc, char *argv[]) {
@@ -485,23 +490,23 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 #endif
        #if defined (host_mips) && defined (MIPSEB)
        #if defined (SYSTYPE_SYSV)
-         printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+         printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0);
        #endif
        #if defined (SYSTYPE_SVR4)
-         printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+         printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0);
        #endif
        #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
-         printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+         printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0);
        #endif
        #endif
          exit (-1);
        }
 EOF
-       $CC_FOR_BUILD -o $dummy $dummy.c &&
-         dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
-         SYSTEM_NAME=`$dummy $dummyarg` &&
+       $CC_FOR_BUILD -o "$dummy" "$dummy.c" &&
+         dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+         SYSTEM_NAME=`"$dummy" "$dummyarg"` &&
            { echo "$SYSTEM_NAME"; exit; }
-       echo mips-mips-riscos${UNAME_RELEASE}
+       echo mips-mips-riscos"$UNAME_RELEASE"
        exit ;;
     Motorola:PowerMAX_OS:*:*)
        echo powerpc-motorola-powermax
@@ -527,17 +532,17 @@ EOF
     AViiON:dgux:*:*)
        # DG/UX returns AViiON for all architectures
        UNAME_PROCESSOR=`/usr/bin/uname -p`
-       if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+       if [ "$UNAME_PROCESSOR" = mc88100 ] || [ "$UNAME_PROCESSOR" = mc88110 ]
        then
-           if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
-              [ ${TARGET_BINARY_INTERFACE}x = x ]
+           if [ "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx ] || \
+              [ "$TARGET_BINARY_INTERFACE"x = x ]
            then
-               echo m88k-dg-dgux${UNAME_RELEASE}
+               echo m88k-dg-dgux"$UNAME_RELEASE"
            else
-               echo m88k-dg-dguxbcs${UNAME_RELEASE}
+               echo m88k-dg-dguxbcs"$UNAME_RELEASE"
            fi
        else
-           echo i586-dg-dgux${UNAME_RELEASE}
+           echo i586-dg-dgux"$UNAME_RELEASE"
        fi
        exit ;;
     M88*:DolphinOS:*:*)        # DolphinOS (SVR3)
@@ -554,7 +559,7 @@ EOF
        echo m68k-tektronix-bsd
        exit ;;
     *:IRIX*:*:*)
-       echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+       echo mips-sgi-irix"`echo "$UNAME_RELEASE"|sed -e 's/-/_/g'`"
        exit ;;
     ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
        echo romp-ibm-aix     # uname -m gives an 8 hex-code CPU id
@@ -566,14 +571,14 @@ EOF
        if [ -x /usr/bin/oslevel ] ; then
                IBM_REV=`/usr/bin/oslevel`
        else
-               IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+               IBM_REV="$UNAME_VERSION.$UNAME_RELEASE"
        fi
-       echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+       echo "$UNAME_MACHINE"-ibm-aix"$IBM_REV"
        exit ;;
     *:AIX:2:3)
        if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
-               eval $set_cc_for_build
-               sed 's/^                //' << EOF >$dummy.c
+               set_cc_for_build
+               sed 's/^                //' << EOF > "$dummy.c"
                #include <sys/systemcfg.h>
 
                main()
@@ -584,7 +589,7 @@ EOF
                        exit(0);
                        }
 EOF
-               if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
+               if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"`
                then
                        echo "$SYSTEM_NAME"
                else
@@ -598,7 +603,7 @@ EOF
        exit ;;
     *:AIX:*:[4567])
        IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
-       if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+       if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then
                IBM_ARCH=rs6000
        else
                IBM_ARCH=powerpc
@@ -607,18 +612,18 @@ EOF
                IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc |
                           awk -F: '{ print $3 }' | sed s/[0-9]*$/0/`
        else
-               IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+               IBM_REV="$UNAME_VERSION.$UNAME_RELEASE"
        fi
-       echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+       echo "$IBM_ARCH"-ibm-aix"$IBM_REV"
        exit ;;
     *:AIX:*:*)
        echo rs6000-ibm-aix
        exit ;;
-    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+    ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*)
        echo romp-ibm-bsd4.4
        exit ;;
     ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
-       echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
+       echo romp-ibm-bsd"$UNAME_RELEASE"   # 4.3 with uname added to
        exit ;;                             # report: romp-ibm BSD 4.3
     *:BOSX:*:*)
        echo rs6000-bull-bosx
@@ -633,28 +638,28 @@ EOF
        echo m68k-hp-bsd4.4
        exit ;;
     9000/[34678]??:HP-UX:*:*)
-       HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
-       case "${UNAME_MACHINE}" in
-           9000/31? )            HP_ARCH=m68000 ;;
-           9000/[34]?? )         HP_ARCH=m68k ;;
+       HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'`
+       case "$UNAME_MACHINE" in
+           9000/31?)            HP_ARCH=m68000 ;;
+           9000/[34]??)         HP_ARCH=m68k ;;
            9000/[678][0-9][0-9])
                if [ -x /usr/bin/getconf ]; then
                    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
-                   case "${sc_cpu_version}" in
+                   case "$sc_cpu_version" in
                      523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0
                      528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1
                      532)                      # CPU_PA_RISC2_0
-                       case "${sc_kernel_bits}" in
+                       case "$sc_kernel_bits" in
                          32) HP_ARCH=hppa2.0n ;;
                          64) HP_ARCH=hppa2.0w ;;
                          '') HP_ARCH=hppa2.0 ;;   # HP-UX 10.20
                        esac ;;
                    esac
                fi
-               if [ "${HP_ARCH}" = "" ]; then
-                   eval $set_cc_for_build
-                   sed 's/^            //' << EOF >$dummy.c
+               if [ "$HP_ARCH" = "" ]; then
+                   set_cc_for_build
+                   sed 's/^            //' << EOF > "$dummy.c"
 
                #define _HPUX_SOURCE
                #include <stdlib.h>
@@ -687,13 +692,13 @@ EOF
                    exit (0);
                }
 EOF
-                   (CCOPTS="" $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+                   (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"`
                    test -z "$HP_ARCH" && HP_ARCH=hppa
                fi ;;
        esac
-       if [ ${HP_ARCH} = hppa2.0w ]
+       if [ "$HP_ARCH" = hppa2.0w ]
        then
-           eval $set_cc_for_build
+           set_cc_for_build
 
            # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
            # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler
@@ -712,15 +717,15 @@ EOF
                HP_ARCH=hppa64
            fi
        fi
-       echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+       echo "$HP_ARCH"-hp-hpux"$HPUX_REV"
        exit ;;
     ia64:HP-UX:*:*)
-       HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
-       echo ia64-hp-hpux${HPUX_REV}
+       HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'`
+       echo ia64-hp-hpux"$HPUX_REV"
        exit ;;
     3050*:HI-UX:*:*)
-       eval $set_cc_for_build
-       sed 's/^        //' << EOF >$dummy.c
+       set_cc_for_build
+       sed 's/^        //' << EOF > "$dummy.c"
        #include <unistd.h>
        int
        main ()
@@ -745,11 +750,11 @@ EOF
          exit (0);
        }
 EOF
-       $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
+       $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` &&
                { echo "$SYSTEM_NAME"; exit; }
        echo unknown-hitachi-hiuxwe2
        exit ;;
-    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*)
        echo hppa1.1-hp-bsd
        exit ;;
     9000/8??:4.3bsd:*:*)
@@ -758,7 +763,7 @@ EOF
     *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
        echo hppa1.0-hp-mpeix
        exit ;;
-    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*)
        echo hppa1.1-hp-osf
        exit ;;
     hp8??:OSF1:*:*)
@@ -766,9 +771,9 @@ EOF
        exit ;;
     i*86:OSF1:*:*)
        if [ -x /usr/sbin/sysversion ] ; then
-           echo ${UNAME_MACHINE}-unknown-osf1mk
+           echo "$UNAME_MACHINE"-unknown-osf1mk
        else
-           echo ${UNAME_MACHINE}-unknown-osf1
+           echo "$UNAME_MACHINE"-unknown-osf1
        fi
        exit ;;
     parisc*:Lites*:*:*)
@@ -793,127 +798,120 @@ EOF
        echo c4-convex-bsd
        exit ;;
     CRAY*Y-MP:*:*:*)
-       echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       echo ymp-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
        exit ;;
     CRAY*[A-Z]90:*:*:*)
-       echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+       echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \
        | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
              -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
              -e 's/\.[^.]*$/.X/'
        exit ;;
     CRAY*TS:*:*:*)
-       echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       echo t90-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
        exit ;;
     CRAY*T3E:*:*:*)
-       echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       echo alphaev5-cray-unicosmk"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
        exit ;;
     CRAY*SV1:*:*:*)
-       echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       echo sv1-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
        exit ;;
     *:UNICOS/mp:*:*)
-       echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+       echo craynv-cray-unicosmp"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
        exit ;;
     F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
        FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
        FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
-       FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+       FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'`
        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
        exit ;;
     5000:UNIX_System_V:4.*:*)
        FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
-       FUJITSU_REL=`echo ${UNAME_RELEASE} | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'`
+       FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'`
        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
        exit ;;
     i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
-       echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+       echo "$UNAME_MACHINE"-pc-bsdi"$UNAME_RELEASE"
        exit ;;
     sparc*:BSD/OS:*:*)
-       echo sparc-unknown-bsdi${UNAME_RELEASE}
+       echo sparc-unknown-bsdi"$UNAME_RELEASE"
        exit ;;
     *:BSD/OS:*:*)
-       echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+       echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE"
+       exit ;;
+    arm:FreeBSD:*:*)
+       UNAME_PROCESSOR=`uname -p`
+       set_cc_for_build
+       if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
+           | grep -q __ARM_PCS_VFP
+       then
+           echo "${UNAME_PROCESSOR}"-unknown-freebsd"`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`"-gnueabi
+       else
+           echo "${UNAME_PROCESSOR}"-unknown-freebsd"`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`"-gnueabihf
+       fi
        exit ;;
     *:FreeBSD:*:*)
        UNAME_PROCESSOR=`/usr/bin/uname -p`
-       case ${UNAME_PROCESSOR} in
+       case "$UNAME_PROCESSOR" in
            amd64)
-               echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
-           *)
-               echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
+               UNAME_PROCESSOR=x86_64 ;;
+           i386)
+               UNAME_PROCESSOR=i586 ;;
        esac
+       echo "$UNAME_PROCESSOR"-unknown-freebsd"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`"
        exit ;;
     i*:CYGWIN*:*)
-       echo ${UNAME_MACHINE}-pc-cygwin
+       echo "$UNAME_MACHINE"-pc-cygwin
        exit ;;
     *:MINGW64*:*)
-       echo ${UNAME_MACHINE}-pc-mingw64
+       echo "$UNAME_MACHINE"-pc-mingw64
        exit ;;
     *:MINGW*:*)
-       echo ${UNAME_MACHINE}-pc-mingw32
+       echo "$UNAME_MACHINE"-pc-mingw32
        exit ;;
     *:MSYS*:*)
-       echo ${UNAME_MACHINE}-pc-msys
-       exit ;;
-    i*:windows32*:*)
-       # uname -m includes "-pc" on this system.
-       echo ${UNAME_MACHINE}-mingw32
+       echo "$UNAME_MACHINE"-pc-msys
        exit ;;
     i*:PW*:*)
-       echo ${UNAME_MACHINE}-pc-pw32
+       echo "$UNAME_MACHINE"-pc-pw32
        exit ;;
     *:Interix*:*)
-       case ${UNAME_MACHINE} in
+       case "$UNAME_MACHINE" in
            x86)
-               echo i586-pc-interix${UNAME_RELEASE}
+               echo i586-pc-interix"$UNAME_RELEASE"
                exit ;;
            authenticamd | genuineintel | EM64T)
-               echo x86_64-unknown-interix${UNAME_RELEASE}
+               echo x86_64-unknown-interix"$UNAME_RELEASE"
                exit ;;
            IA64)
-               echo ia64-unknown-interix${UNAME_RELEASE}
+               echo ia64-unknown-interix"$UNAME_RELEASE"
                exit ;;
        esac ;;
-    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
-       echo i${UNAME_MACHINE}-pc-mks
-       exit ;;
-    8664:Windows_NT:*)
-       echo x86_64-pc-mks
-       exit ;;
-    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
-       # How do we know it's Interix rather than the generic POSIX subsystem?
-       # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
-       # UNAME_MACHINE based on the output of uname instead of i386?
-       echo i586-pc-interix
-       exit ;;
     i*:UWIN*:*)
-       echo ${UNAME_MACHINE}-pc-uwin
+       echo "$UNAME_MACHINE"-pc-uwin
        exit ;;
     amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
        echo x86_64-unknown-cygwin
        exit ;;
-    p*:CYGWIN*:*)
-       echo powerpcle-unknown-cygwin
-       exit ;;
     prep*:SunOS:5.*:*)
-       echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+       echo powerpcle-unknown-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
        exit ;;
     *:GNU:*:*)
        # the GNU system
-       echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+       echo "`echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,'`-unknown-$LIBC`echo "$UNAME_RELEASE"|sed -e 's,/.*$,,'`"
        exit ;;
     *:GNU/*:*:*)
        # other systems with GNU libc and userland
-       echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC}
+       echo "$UNAME_MACHINE-unknown-`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`-$LIBC"
        exit ;;
-    i*86:Minix:*:*)
-       echo ${UNAME_MACHINE}-pc-minix
+    *:Minix:*:*)
+       echo "$UNAME_MACHINE"-unknown-minix
        exit ;;
     aarch64:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
        exit ;;
     aarch64_be:Linux:*:*)
        UNAME_MACHINE=aarch64_be
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
        exit ;;
     alpha:Linux:*:*)
        case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
@@ -927,63 +925,63 @@ EOF
        esac
        objdump --private-headers /bin/sh | grep -q ld.so.1
        if test "$?" = 0 ; then LIBC=gnulibc1 ; fi
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
        exit ;;
     arc:Linux:*:* | arceb:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
        exit ;;
     arm*:Linux:*:*)
-       eval $set_cc_for_build
+       set_cc_for_build
        if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
            | grep -q __ARM_EABI__
        then
-           echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+           echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
        else
            if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
                | grep -q __ARM_PCS_VFP
            then
-               echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi
+               echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabi
            else
-               echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf
+               echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabihf
            fi
        fi
        exit ;;
     avr32*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
        exit ;;
     cris:Linux:*:*)
-       echo ${UNAME_MACHINE}-axis-linux-${LIBC}
+       echo "$UNAME_MACHINE"-axis-linux-"$LIBC"
        exit ;;
     crisv32:Linux:*:*)
-       echo ${UNAME_MACHINE}-axis-linux-${LIBC}
+       echo "$UNAME_MACHINE"-axis-linux-"$LIBC"
        exit ;;
     e2k:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
        exit ;;
     frv:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
        exit ;;
     hexagon:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
        exit ;;
     i*86:Linux:*:*)
-       echo ${UNAME_MACHINE}-pc-linux-${LIBC}
+       echo "$UNAME_MACHINE"-pc-linux-"$LIBC"
        exit ;;
     ia64:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
        exit ;;
     k1om:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
        exit ;;
     m32r*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
        exit ;;
     m68*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
        exit ;;
     mips:Linux:*:* | mips64:Linux:*:*)
-       eval $set_cc_for_build
-       sed 's/^        //' << EOF >$dummy.c
+       set_cc_for_build
+       sed 's/^        //' << EOF > "$dummy.c"
        #undef CPU
        #undef ${UNAME_MACHINE}
        #undef ${UNAME_MACHINE}el
@@ -997,70 +995,70 @@ EOF
        #endif
        #endif
 EOF
-       eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
-       test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
+       eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU'`"
+       test "x$CPU" != x && { echo "$CPU-unknown-linux-$LIBC"; exit; }
        ;;
     mips64el:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
        exit ;;
     openrisc*:Linux:*:*)
-       echo or1k-unknown-linux-${LIBC}
+       echo or1k-unknown-linux-"$LIBC"
        exit ;;
     or32:Linux:*:* | or1k*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
        exit ;;
     padre:Linux:*:*)
-       echo sparc-unknown-linux-${LIBC}
+       echo sparc-unknown-linux-"$LIBC"
        exit ;;
     parisc64:Linux:*:* | hppa64:Linux:*:*)
-       echo hppa64-unknown-linux-${LIBC}
+       echo hppa64-unknown-linux-"$LIBC"
        exit ;;
     parisc:Linux:*:* | hppa:Linux:*:*)
        # Look for CPU level
        case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
-         PA7*) echo hppa1.1-unknown-linux-${LIBC} ;;
-         PA8*) echo hppa2.0-unknown-linux-${LIBC} ;;
-         *)    echo hppa-unknown-linux-${LIBC} ;;
+         PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;;
+         PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;;
+         *)    echo hppa-unknown-linux-"$LIBC" ;;
        esac
        exit ;;
     ppc64:Linux:*:*)
-       echo powerpc64-unknown-linux-${LIBC}
+       echo powerpc64-unknown-linux-"$LIBC"
        exit ;;
     ppc:Linux:*:*)
-       echo powerpc-unknown-linux-${LIBC}
+       echo powerpc-unknown-linux-"$LIBC"
        exit ;;
     ppc64le:Linux:*:*)
-       echo powerpc64le-unknown-linux-${LIBC}
+       echo powerpc64le-unknown-linux-"$LIBC"
        exit ;;
     ppcle:Linux:*:*)
-       echo powerpcle-unknown-linux-${LIBC}
+       echo powerpcle-unknown-linux-"$LIBC"
        exit ;;
     riscv32:Linux:*:* | riscv64:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
        exit ;;
     s390:Linux:*:* | s390x:Linux:*:*)
-       echo ${UNAME_MACHINE}-ibm-linux-${LIBC}
+       echo "$UNAME_MACHINE"-ibm-linux-"$LIBC"
        exit ;;
     sh64*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
        exit ;;
     sh*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
        exit ;;
     sparc:Linux:*:* | sparc64:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
        exit ;;
     tile*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
        exit ;;
     vax:Linux:*:*)
-       echo ${UNAME_MACHINE}-dec-linux-${LIBC}
+       echo "$UNAME_MACHINE"-dec-linux-"$LIBC"
        exit ;;
     x86_64:Linux:*:*)
-       echo ${UNAME_MACHINE}-pc-linux-${LIBC}
+       echo "$UNAME_MACHINE"-pc-linux-"$LIBC"
        exit ;;
     xtensa*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
        exit ;;
     i*86:DYNIX/ptx:4*:*)
        # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
@@ -1074,34 +1072,34 @@ EOF
        # I am not positive that other SVR4 systems won't match this,
        # I just have to hope.  -- rms.
        # Use sysv4.2uw... so that sysv4* matches it.
-       echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+       echo "$UNAME_MACHINE"-pc-sysv4.2uw"$UNAME_VERSION"
        exit ;;
     i*86:OS/2:*:*)
        # If we were able to find `uname', then EMX Unix compatibility
        # is probably installed.
-       echo ${UNAME_MACHINE}-pc-os2-emx
+       echo "$UNAME_MACHINE"-pc-os2-emx
        exit ;;
     i*86:XTS-300:*:STOP)
-       echo ${UNAME_MACHINE}-unknown-stop
+       echo "$UNAME_MACHINE"-unknown-stop
        exit ;;
     i*86:atheos:*:*)
-       echo ${UNAME_MACHINE}-unknown-atheos
+       echo "$UNAME_MACHINE"-unknown-atheos
        exit ;;
     i*86:syllable:*:*)
-       echo ${UNAME_MACHINE}-pc-syllable
+       echo "$UNAME_MACHINE"-pc-syllable
        exit ;;
     i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
-       echo i386-unknown-lynxos${UNAME_RELEASE}
+       echo i386-unknown-lynxos"$UNAME_RELEASE"
        exit ;;
     i*86:*DOS:*:*)
-       echo ${UNAME_MACHINE}-pc-msdosdjgpp
+       echo "$UNAME_MACHINE"-pc-msdosdjgpp
        exit ;;
-    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
-       UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+    i*86:*:4.*:*)
+       UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'`
        if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
-               echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+               echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL"
        else
-               echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+               echo "$UNAME_MACHINE"-pc-sysv"$UNAME_REL"
        fi
        exit ;;
     i*86:*:5:[678]*)
@@ -1111,12 +1109,12 @@ EOF
            *Pentium)        UNAME_MACHINE=i586 ;;
            *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
        esac
-       echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+       echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}{$UNAME_VERSION}"
        exit ;;
     i*86:*:3.2:*)
        if test -f /usr/options/cb.name; then
                UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
-               echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+               echo "$UNAME_MACHINE"-pc-isc"$UNAME_REL"
        elif /bin/uname -X 2>/dev/null >/dev/null ; then
                UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
                (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
@@ -1126,9 +1124,9 @@ EOF
                        && UNAME_MACHINE=i686
                (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
                        && UNAME_MACHINE=i686
-               echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+               echo "$UNAME_MACHINE"-pc-sco"$UNAME_REL"
        else
-               echo ${UNAME_MACHINE}-pc-sysv32
+               echo "$UNAME_MACHINE"-pc-sysv32
        fi
        exit ;;
     pc:*:*:*)
@@ -1148,9 +1146,9 @@ EOF
        exit ;;
     i860:*:4.*:*) # i860-SVR4
        if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
-         echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+         echo i860-stardent-sysv"$UNAME_RELEASE" # Stardent Vistra i860-SVR4
        else # Add other i860-SVR4 vendors below as they are discovered.
-         echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
+         echo i860-unknown-sysv"$UNAME_RELEASE"  # Unknown i860-SVR4
        fi
        exit ;;
     mini*:CTIX:SYS*5:*)
@@ -1170,9 +1168,9 @@ EOF
        test -r /etc/.relid \
        && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-         && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+         && { echo i486-ncr-sysv4.3"$OS_REL"; exit; }
        /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
-         && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+         && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;;
     3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
          && { echo i486-ncr-sysv4; exit; } ;;
@@ -1181,28 +1179,28 @@ EOF
        test -r /etc/.relid \
            && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-           && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
+           && { echo i486-ncr-sysv4.3"$OS_REL"; exit; }
        /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
-           && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
+           && { echo i586-ncr-sysv4.3"$OS_REL"; exit; }
        /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
-           && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
+           && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;;
     m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
-       echo m68k-unknown-lynxos${UNAME_RELEASE}
+       echo m68k-unknown-lynxos"$UNAME_RELEASE"
        exit ;;
     mc68030:UNIX_System_V:4.*:*)
        echo m68k-atari-sysv4
        exit ;;
     TSUNAMI:LynxOS:2.*:*)
-       echo sparc-unknown-lynxos${UNAME_RELEASE}
+       echo sparc-unknown-lynxos"$UNAME_RELEASE"
        exit ;;
     rs6000:LynxOS:2.*:*)
-       echo rs6000-unknown-lynxos${UNAME_RELEASE}
+       echo rs6000-unknown-lynxos"$UNAME_RELEASE"
        exit ;;
     PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
-       echo powerpc-unknown-lynxos${UNAME_RELEASE}
+       echo powerpc-unknown-lynxos"$UNAME_RELEASE"
        exit ;;
     SM[BE]S:UNIX_SV:*:*)
-       echo mips-dde-sysv${UNAME_RELEASE}
+       echo mips-dde-sysv"$UNAME_RELEASE"
        exit ;;
     RM*:ReliantUNIX-*:*:*)
        echo mips-sni-sysv4
@@ -1213,7 +1211,7 @@ EOF
     *:SINIX-*:*:*)
        if uname -p 2>/dev/null >/dev/null ; then
                UNAME_MACHINE=`(uname -p) 2>/dev/null`
-               echo ${UNAME_MACHINE}-sni-sysv4
+               echo "$UNAME_MACHINE"-sni-sysv4
        else
                echo ns32k-sni-sysv
        fi
@@ -1233,23 +1231,23 @@ EOF
        exit ;;
     i*86:VOS:*:*)
        # From Paul.Green@stratus.com.
-       echo ${UNAME_MACHINE}-stratus-vos
+       echo "$UNAME_MACHINE"-stratus-vos
        exit ;;
     *:VOS:*:*)
        # From Paul.Green@stratus.com.
        echo hppa1.1-stratus-vos
        exit ;;
     mc68*:A/UX:*:*)
-       echo m68k-apple-aux${UNAME_RELEASE}
+       echo m68k-apple-aux"$UNAME_RELEASE"
        exit ;;
     news*:NEWS-OS:6*:*)
        echo mips-sony-newsos6
        exit ;;
     R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
        if [ -d /usr/nec ]; then
-               echo mips-nec-sysv${UNAME_RELEASE}
+               echo mips-nec-sysv"$UNAME_RELEASE"
        else
-               echo mips-unknown-sysv${UNAME_RELEASE}
+               echo mips-unknown-sysv"$UNAME_RELEASE"
        fi
        exit ;;
     BeBox:BeOS:*:*)    # BeOS running on hardware made by Be, PPC only.
@@ -1268,49 +1266,56 @@ EOF
        echo x86_64-unknown-haiku
        exit ;;
     SX-4:SUPER-UX:*:*)
-       echo sx4-nec-superux${UNAME_RELEASE}
+       echo sx4-nec-superux"$UNAME_RELEASE"
        exit ;;
     SX-5:SUPER-UX:*:*)
-       echo sx5-nec-superux${UNAME_RELEASE}
+       echo sx5-nec-superux"$UNAME_RELEASE"
        exit ;;
     SX-6:SUPER-UX:*:*)
-       echo sx6-nec-superux${UNAME_RELEASE}
+       echo sx6-nec-superux"$UNAME_RELEASE"
        exit ;;
     SX-7:SUPER-UX:*:*)
-       echo sx7-nec-superux${UNAME_RELEASE}
+       echo sx7-nec-superux"$UNAME_RELEASE"
        exit ;;
     SX-8:SUPER-UX:*:*)
-       echo sx8-nec-superux${UNAME_RELEASE}
+       echo sx8-nec-superux"$UNAME_RELEASE"
        exit ;;
     SX-8R:SUPER-UX:*:*)
-       echo sx8r-nec-superux${UNAME_RELEASE}
+       echo sx8r-nec-superux"$UNAME_RELEASE"
        exit ;;
     SX-ACE:SUPER-UX:*:*)
-       echo sxace-nec-superux${UNAME_RELEASE}
+       echo sxace-nec-superux"$UNAME_RELEASE"
        exit ;;
     Power*:Rhapsody:*:*)
-       echo powerpc-apple-rhapsody${UNAME_RELEASE}
+       echo powerpc-apple-rhapsody"$UNAME_RELEASE"
        exit ;;
     *:Rhapsody:*:*)
-       echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+       echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE"
        exit ;;
     *:Darwin:*:*)
        UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
-       eval $set_cc_for_build
+       set_cc_for_build
        if test "$UNAME_PROCESSOR" = unknown ; then
            UNAME_PROCESSOR=powerpc
        fi
-       if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then
+       if test "`echo "$UNAME_RELEASE" | sed -e 's/\..*//'`" -le 10 ; then
            if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
                if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
-                   (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
-                   grep IS_64BIT_ARCH >/dev/null
+                      (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+                      grep IS_64BIT_ARCH >/dev/null
                then
                    case $UNAME_PROCESSOR in
                        i386) UNAME_PROCESSOR=x86_64 ;;
                        powerpc) UNAME_PROCESSOR=powerpc64 ;;
                    esac
                fi
+               # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc
+               if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \
+                      (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+                      grep IS_PPC >/dev/null
+               then
+                   UNAME_PROCESSOR=powerpc
+               fi
            fi
        elif test "$UNAME_PROCESSOR" = i386 ; then
            # Avoid executing cc on OS X 10.9, as it ships with a stub
@@ -1321,7 +1326,7 @@ EOF
            # that Apple uses in portable devices.
            UNAME_PROCESSOR=x86_64
        fi
-       echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+       echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE"
        exit ;;
     *:procnto*:*:* | *:QNX:[0123456789]*:*)
        UNAME_PROCESSOR=`uname -p`
@@ -1329,19 +1334,25 @@ EOF
                UNAME_PROCESSOR=i386
                UNAME_MACHINE=pc
        fi
-       echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+       echo "$UNAME_PROCESSOR"-"$UNAME_MACHINE"-nto-qnx"$UNAME_RELEASE"
        exit ;;
     *:QNX:*:4*)
        echo i386-pc-qnx
        exit ;;
-    NEO-?:NONSTOP_KERNEL:*:*)
-       echo neo-tandem-nsk${UNAME_RELEASE}
+    NEO-*:NONSTOP_KERNEL:*:*)
+       echo neo-tandem-nsk"$UNAME_RELEASE"
        exit ;;
     NSE-*:NONSTOP_KERNEL:*:*)
-       echo nse-tandem-nsk${UNAME_RELEASE}
+       echo nse-tandem-nsk"$UNAME_RELEASE"
+       exit ;;
+    NSR-*:NONSTOP_KERNEL:*:*)
+       echo nsr-tandem-nsk"$UNAME_RELEASE"
+       exit ;;
+    NSV-*:NONSTOP_KERNEL:*:*)
+       echo nsv-tandem-nsk"$UNAME_RELEASE"
        exit ;;
-    NSR-?:NONSTOP_KERNEL:*:*)
-       echo nsr-tandem-nsk${UNAME_RELEASE}
+    NSX-*:NONSTOP_KERNEL:*:*)
+       echo nsx-tandem-nsk"$UNAME_RELEASE"
        exit ;;
     *:NonStop-UX:*:*)
        echo mips-compaq-nonstopux
@@ -1350,18 +1361,19 @@ EOF
        echo bs2000-siemens-sysv
        exit ;;
     DS/*:UNIX_System_V:*:*)
-       echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+       echo "$UNAME_MACHINE"-"$UNAME_SYSTEM"-"$UNAME_RELEASE"
        exit ;;
     *:Plan9:*:*)
        # "uname -m" is not consistent, so use $cputype instead. 386
        # is converted to i386 for consistency with other x86
        # operating systems.
+       # shellcheck disable=SC2154
        if test "$cputype" = 386; then
            UNAME_MACHINE=i386
        else
            UNAME_MACHINE="$cputype"
        fi
-       echo ${UNAME_MACHINE}-unknown-plan9
+       echo "$UNAME_MACHINE"-unknown-plan9
        exit ;;
     *:TOPS-10:*:*)
        echo pdp10-unknown-tops10
@@ -1382,14 +1394,14 @@ EOF
        echo pdp10-unknown-its
        exit ;;
     SEI:*:*:SEIUX)
-       echo mips-sei-seiux${UNAME_RELEASE}
+       echo mips-sei-seiux"$UNAME_RELEASE"
        exit ;;
     *:DragonFly:*:*)
-       echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+       echo "$UNAME_MACHINE"-unknown-dragonfly"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`"
        exit ;;
     *:*VMS:*:*)
        UNAME_MACHINE=`(uname -p) 2>/dev/null`
-       case "${UNAME_MACHINE}" in
+       case "$UNAME_MACHINE" in
            A*) echo alpha-dec-vms ; exit ;;
            I*) echo ia64-dec-vms ; exit ;;
            V*) echo vax-dec-vms ; exit ;;
@@ -1398,32 +1410,44 @@ EOF
        echo i386-pc-xenix
        exit ;;
     i*86:skyos:*:*)
-       echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE} | sed -e 's/ .*$//'`
+       echo "$UNAME_MACHINE"-pc-skyos"`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`"
        exit ;;
     i*86:rdos:*:*)
-       echo ${UNAME_MACHINE}-pc-rdos
+       echo "$UNAME_MACHINE"-pc-rdos
        exit ;;
     i*86:AROS:*:*)
-       echo ${UNAME_MACHINE}-pc-aros
+       echo "$UNAME_MACHINE"-pc-aros
        exit ;;
     x86_64:VMkernel:*:*)
-       echo ${UNAME_MACHINE}-unknown-esx
+       echo "$UNAME_MACHINE"-unknown-esx
        exit ;;
     amd64:Isilon\ OneFS:*:*)
        echo x86_64-unknown-onefs
        exit ;;
 esac
 
+echo "$0: unable to guess system type" >&2
+
+case "$UNAME_MACHINE:$UNAME_SYSTEM" in
+    mips:Linux | mips64:Linux)
+       # If we got here on MIPS GNU/Linux, output extra information.
+       cat >&2 <<EOF
+
+NOTE: MIPS GNU/Linux systems require a C compiler to fully recognize
+the system type. Please install a C compiler and try again.
+EOF
+       ;;
+esac
+
 cat >&2 <<EOF
-$0: unable to guess system type
 
 This script (version $timestamp), has failed to recognize the
-operating system you are using. If your script is old, overwrite
-config.guess and config.sub with the latest versions from:
+operating system you are using. If your script is old, overwrite *all*
+copies of config.guess and config.sub with the latest versions from:
 
-  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
+  https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
 and
-  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
+  https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
 
 If $0 has already been updated, send the following data and any
 information you think might be pertinent to config-patches@gnu.org to
@@ -1446,16 +1470,16 @@ hostinfo               = `(hostinfo) 2>/dev/null`
 /usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
 /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
 
-UNAME_MACHINE = ${UNAME_MACHINE}
-UNAME_RELEASE = ${UNAME_RELEASE}
-UNAME_SYSTEM  = ${UNAME_SYSTEM}
-UNAME_VERSION = ${UNAME_VERSION}
+UNAME_MACHINE = "$UNAME_MACHINE"
+UNAME_RELEASE = "$UNAME_RELEASE"
+UNAME_SYSTEM  = "$UNAME_SYSTEM"
+UNAME_VERSION = "$UNAME_VERSION"
 EOF
 
 exit 1
 
 # Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
+# eval: (add-hook 'before-save-hook 'time-stamp)
 # time-stamp-start: "timestamp='"
 # time-stamp-format: "%:y-%02m-%02d"
 # time-stamp-end: "'"
index ba15a57a5cf34976f8733b3f43b9dd4b2e910c7b..b51fb8cdb69ea2e3828774c356acc50a8f759981 100755 (executable)
@@ -1,8 +1,8 @@
-#!/usr/bin/sh
+#! /bin/sh
 # Configuration validation subroutine script.
-#   Copyright 1992-2016 Free Software Foundation, Inc.
+#   Copyright 1992-2018 Free Software Foundation, Inc.
 
-timestamp='2016-09-05'
+timestamp='2018-08-29'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -15,7 +15,7 @@ timestamp='2016-09-05'
 # General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# along with this program; if not, see <https://www.gnu.org/licenses/>.
 #
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
@@ -33,7 +33,7 @@ timestamp='2016-09-05'
 # Otherwise, we print the canonical config type on stdout and succeed.
 
 # You can get the latest version of this script from:
-# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
+# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
 
 # This file is supposed to be the same for all GNU packages
 # and recognize all the CPU types, system types and aliases
@@ -57,7 +57,7 @@ Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
 
 Canonicalize a configuration name.
 
-Operation modes:
+Options:
   -h, --help         print this help, then exit
   -t, --time-stamp   print date of last modification, then exit
   -v, --version      print version number, then exit
@@ -67,7 +67,7 @@ Report bugs and patches to <config-patches@gnu.org>."
 version="\
 GNU config.sub ($timestamp)
 
-Copyright 1992-2016 Free Software Foundation, Inc.
+Copyright 1992-2018 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -94,7 +94,7 @@ while test $# -gt 0 ; do
 
     *local*)
        # First pass through any local machine types.
-       echo $1
+       echo "$1"
        exit ;;
 
     * )
@@ -110,1242 +110,1159 @@ case $# in
     exit 1;;
 esac
 
-# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
-# Here we must recognize all the valid KERNEL-OS combinations.
-maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
-case $maybe_os in
-  nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
-  linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
-  knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \
-  kopensolaris*-gnu* | cloudabi*-eabi* | \
-  storm-chaos* | os2-emx* | rtmk-nova*)
-    os=-$maybe_os
-    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
-    ;;
-  android-linux)
-    os=-linux-android
-    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
-    ;;
-  *)
-    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
-    if [ $basic_machine != $1 ]
-    then os=`echo $1 | sed 's/.*-/-/'`
-    else os=; fi
-    ;;
-esac
+# Split fields of configuration type
+IFS="-" read -r field1 field2 field3 field4 <<EOF
+$1
+EOF
 
-### Let's recognize common machines as not being operating systems so
-### that things like config.sub decstation-3100 work.  We also
-### recognize some manufacturers as not being operating systems, so we
-### can provide default operating systems below.
-case $os in
-       -sun*os*)
-               # Prevent following clause from handling this invalid input.
-               ;;
-       -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
-       -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
-       -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
-       -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
-       -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
-       -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
-       -apple | -axis | -knuth | -cray | -microblaze*)
-               os=
-               basic_machine=$1
-               ;;
-       -bluegene*)
-               os=-cnk
-               ;;
-       -sim | -cisco | -oki | -wec | -winbond)
-               os=
-               basic_machine=$1
-               ;;
-       -scout)
-               ;;
-       -wrs)
-               os=-vxworks
-               basic_machine=$1
-               ;;
-       -chorusos*)
-               os=-chorusos
-               basic_machine=$1
-               ;;
-       -chorusrdb)
-               os=-chorusrdb
-               basic_machine=$1
-               ;;
-       -hiux*)
-               os=-hiuxwe2
-               ;;
-       -sco6)
-               os=-sco5v6
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -sco5)
-               os=-sco3.2v5
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -sco4)
-               os=-sco3.2v4
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -sco3.2.[4-9]*)
-               os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -sco3.2v[4-9]*)
-               # Don't forget version if it is 3.2v4 or newer.
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -sco5v6*)
-               # Don't forget version if it is 3.2v4 or newer.
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -sco*)
-               os=-sco3.2v2
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -udk*)
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -isc)
-               os=-isc2.2
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -clix*)
-               basic_machine=clipper-intergraph
-               ;;
-       -isc*)
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -lynx*178)
-               os=-lynxos178
-               ;;
-       -lynx*5)
-               os=-lynxos5
-               ;;
-       -lynx*)
-               os=-lynxos
+# Separate into logical components for further validation
+case $1 in
+       *-*-*-*-*)
+               echo Invalid configuration \`"$1"\': more than four components >&2
+               exit 1
                ;;
-       -ptx*)
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+       *-*-*-*)
+               basic_machine=$field1-$field2
+               os=$field3-$field4
                ;;
-       -windowsnt*)
-               os=`echo $os | sed -e 's/windowsnt/winnt/'`
+       *-*-*)
+               # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two
+               # parts
+               maybe_os=$field2-$field3
+               case $maybe_os in
+                       nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc \
+                       | linux-newlib* | linux-musl* | linux-uclibc* | uclinux-uclibc* \
+                       | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \
+                       | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \
+                       | storm-chaos* | os2-emx* | rtmk-nova*)
+                               basic_machine=$field1
+                               os=$maybe_os
+                               ;;
+                       android-linux)
+                               basic_machine=$field1-unknown
+                               os=linux-android
+                               ;;
+                       *)
+                               basic_machine=$field1-$field2
+                               os=$field3
+                               ;;
+               esac
                ;;
-       -psos*)
-               os=-psos
+       *-*)
+               # A lone config we happen to match not fitting any patern
+               case $field1-$field2 in
+                       decstation-3100)
+                               basic_machine=mips-dec
+                               os=
+                               ;;
+                       *-*)
+                               # Second component is usually, but not always the OS
+                               case $field2 in
+                                       # Prevent following clause from handling this valid os
+                                       sun*os*)
+                                               basic_machine=$field1
+                                               os=$field2
+                                               ;;
+                                       # Manufacturers
+                                       dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \
+                                       | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \
+                                       | unicom* | ibm* | next | hp | isi* | apollo | altos* \
+                                       | convergent* | ncr* | news | 32* | 3600* | 3100* \
+                                       | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \
+                                       | ultra | tti* | harris | dolphin | highlevel | gould \
+                                       | cbm | ns | masscomp | apple | axis | knuth | cray \
+                                       | microblaze* | sim | cisco \
+                                       | oki | wec | wrs | winbond)
+                                               basic_machine=$field1-$field2
+                                               os=
+                                               ;;
+                                       *)
+                                               basic_machine=$field1
+                                               os=$field2
+                                               ;;
+                               esac
+                       ;;
+               esac
                ;;
-       -mint | -mint[0-9]*)
-               basic_machine=m68k-atari
-               os=-mint
+       *)
+               # Convert single-component short-hands not valid as part of
+               # multi-component configurations.
+               case $field1 in
+                       386bsd)
+                               basic_machine=i386-pc
+                               os=bsd
+                               ;;
+                       a29khif)
+                               basic_machine=a29k-amd
+                               os=udi
+                               ;;
+                       adobe68k)
+                               basic_machine=m68010-adobe
+                               os=scout
+                               ;;
+                       alliant)
+                               basic_machine=fx80-alliant
+                               os=
+                               ;;
+                       altos | altos3068)
+                               basic_machine=m68k-altos
+                               os=
+                               ;;
+                       am29k)
+                               basic_machine=a29k-none
+                               os=bsd
+                               ;;
+                       amdahl)
+                               basic_machine=580-amdahl
+                               os=sysv
+                               ;;
+                       amiga)
+                               basic_machine=m68k-unknown
+                               os=
+                               ;;
+                       amigaos | amigados)
+                               basic_machine=m68k-unknown
+                               os=amigaos
+                               ;;
+                       amigaunix | amix)
+                               basic_machine=m68k-unknown
+                               os=sysv4
+                               ;;
+                       apollo68)
+                               basic_machine=m68k-apollo
+                               os=sysv
+                               ;;
+                       apollo68bsd)
+                               basic_machine=m68k-apollo
+                               os=bsd
+                               ;;
+                       aros)
+                               basic_machine=i386-pc
+                               os=aros
+                               ;;
+                       aux)
+                               basic_machine=m68k-apple
+                               os=aux
+                               ;;
+                       balance)
+                               basic_machine=ns32k-sequent
+                               os=dynix
+                               ;;
+                       blackfin)
+                               basic_machine=bfin-unknown
+                               os=linux
+                               ;;
+                       cegcc)
+                               basic_machine=arm-unknown
+                               os=cegcc
+                               ;;
+                       convex-c1)
+                               basic_machine=c1-convex
+                               os=bsd
+                               ;;
+                       convex-c2)
+                               basic_machine=c2-convex
+                               os=bsd
+                               ;;
+                       convex-c32)
+                               basic_machine=c32-convex
+                               os=bsd
+                               ;;
+                       convex-c34)
+                               basic_machine=c34-convex
+                               os=bsd
+                               ;;
+                       convex-c38)
+                               basic_machine=c38-convex
+                               os=bsd
+                               ;;
+                       cray)
+                               basic_machine=j90-cray
+                               os=unicos
+                               ;;
+                       crds | unos)
+                               basic_machine=m68k-crds
+                               os=
+                               ;;
+                       da30)
+                               basic_machine=m68k-da30
+                               os=
+                               ;;
+                       decstation | pmax | pmin | dec3100 | decstatn)
+                               basic_machine=mips-dec
+                               os=
+                               ;;
+                       delta88)
+                               basic_machine=m88k-motorola
+                               os=sysv3
+                               ;;
+                       dicos)
+                               basic_machine=i686-pc
+                               os=dicos
+                               ;;
+                       djgpp)
+                               basic_machine=i586-pc
+                               os=msdosdjgpp
+                               ;;
+                       ebmon29k)
+                               basic_machine=a29k-amd
+                               os=ebmon
+                               ;;
+                       es1800 | OSE68k | ose68k | ose | OSE)
+                               basic_machine=m68k-ericsson
+                               os=ose
+                               ;;
+                       gmicro)
+                               basic_machine=tron-gmicro
+                               os=sysv
+                               ;;
+                       go32)
+                               basic_machine=i386-pc
+                               os=go32
+                               ;;
+                       h8300hms)
+                               basic_machine=h8300-hitachi
+                               os=hms
+                               ;;
+                       h8300xray)
+                               basic_machine=h8300-hitachi
+                               os=xray
+                               ;;
+                       h8500hms)
+                               basic_machine=h8500-hitachi
+                               os=hms
+                               ;;
+                       harris)
+                               basic_machine=m88k-harris
+                               os=sysv3
+                               ;;
+                       hp300)
+                               basic_machine=m68k-hp
+                               ;;
+                       hp300bsd)
+                               basic_machine=m68k-hp
+                               os=bsd
+                               ;;
+                       hp300hpux)
+                               basic_machine=m68k-hp
+                               os=hpux
+                               ;;
+                       hppaosf)
+                               basic_machine=hppa1.1-hp
+                               os=osf
+                               ;;
+                       hppro)
+                               basic_machine=hppa1.1-hp
+                               os=proelf
+                               ;;
+                       i386mach)
+                               basic_machine=i386-mach
+                               os=mach
+                               ;;
+                       vsta)
+                               basic_machine=i386-pc
+                               os=vsta
+                               ;;
+                       isi68 | isi)
+                               basic_machine=m68k-isi
+                               os=sysv
+                               ;;
+                       m68knommu)
+                               basic_machine=m68k-unknown
+                               os=linux
+                               ;;
+                       magnum | m3230)
+                               basic_machine=mips-mips
+                               os=sysv
+                               ;;
+                       merlin)
+                               basic_machine=ns32k-utek
+                               os=sysv
+                               ;;
+                       mingw64)
+                               basic_machine=x86_64-pc
+                               os=mingw64
+                               ;;
+                       mingw32)
+                               basic_machine=i686-pc
+                               os=mingw32
+                               ;;
+                       mingw32ce)
+                               basic_machine=arm-unknown
+                               os=mingw32ce
+                               ;;
+                       monitor)
+                               basic_machine=m68k-rom68k
+                               os=coff
+                               ;;
+                       morphos)
+                               basic_machine=powerpc-unknown
+                               os=morphos
+                               ;;
+                       moxiebox)
+                               basic_machine=moxie-unknown
+                               os=moxiebox
+                               ;;
+                       msdos)
+                               basic_machine=i386-pc
+                               os=msdos
+                               ;;
+                       msys)
+                               basic_machine=i686-pc
+                               os=msys
+                               ;;
+                       mvs)
+                               basic_machine=i370-ibm
+                               os=mvs
+                               ;;
+                       nacl)
+                               basic_machine=le32-unknown
+                               os=nacl
+                               ;;
+                       ncr3000)
+                               basic_machine=i486-ncr
+                               os=sysv4
+                               ;;
+                       netbsd386)
+                               basic_machine=i386-pc
+                               os=netbsd
+                               ;;
+                       netwinder)
+                               basic_machine=armv4l-rebel
+                               os=linux
+                               ;;
+                       news | news700 | news800 | news900)
+                               basic_machine=m68k-sony
+                               os=newsos
+                               ;;
+                       news1000)
+                               basic_machine=m68030-sony
+                               os=newsos
+                               ;;
+                       necv70)
+                               basic_machine=v70-nec
+                               os=sysv
+                               ;;
+                       nh3000)
+                               basic_machine=m68k-harris
+                               os=cxux
+                               ;;
+                       nh[45]000)
+                               basic_machine=m88k-harris
+                               os=cxux
+                               ;;
+                       nindy960)
+                               basic_machine=i960-intel
+                               os=nindy
+                               ;;
+                       mon960)
+                               basic_machine=i960-intel
+                               os=mon960
+                               ;;
+                       nonstopux)
+                               basic_machine=mips-compaq
+                               os=nonstopux
+                               ;;
+                       os400)
+                               basic_machine=powerpc-ibm
+                               os=os400
+                               ;;
+                       OSE68000 | ose68000)
+                               basic_machine=m68000-ericsson
+                               os=ose
+                               ;;
+                       os68k)
+                               basic_machine=m68k-none
+                               os=os68k
+                               ;;
+                       paragon)
+                               basic_machine=i860-intel
+                               os=osf
+                               ;;
+                       parisc)
+                               basic_machine=hppa-unknown
+                               os=linux
+                               ;;
+                       pw32)
+                               basic_machine=i586-unknown
+                               os=pw32
+                               ;;
+                       rdos | rdos64)
+                               basic_machine=x86_64-pc
+                               os=rdos
+                               ;;
+                       rdos32)
+                               basic_machine=i386-pc
+                               os=rdos
+                               ;;
+                       rom68k)
+                               basic_machine=m68k-rom68k
+                               os=coff
+                               ;;
+                       sa29200)
+                               basic_machine=a29k-amd
+                               os=udi
+                               ;;
+                       sei)
+                               basic_machine=mips-sei
+                               os=seiux
+                               ;;
+                       sequent)
+                               basic_machine=i386-sequent
+                               os=
+                               ;;
+                       sps7)
+                               basic_machine=m68k-bull
+                               os=sysv2
+                               ;;
+                       st2000)
+                               basic_machine=m68k-tandem
+                               os=
+                               ;;
+                       stratus)
+                               basic_machine=i860-stratus
+                               os=sysv4
+                               ;;
+                       sun2)
+                               basic_machine=m68000-sun
+                               os=
+                               ;;
+                       sun2os3)
+                               basic_machine=m68000-sun
+                               os=sunos3
+                               ;;
+                       sun2os4)
+                               basic_machine=m68000-sun
+                               os=sunos4
+                               ;;
+                       sun3)
+                               basic_machine=m68k-sun
+                               os=
+                               ;;
+                       sun3os3)
+                               basic_machine=m68k-sun
+                               os=sunos3
+                               ;;
+                       sun3os4)
+                               basic_machine=m68k-sun
+                               os=sunos4
+                               ;;
+                       sun4)
+                               basic_machine=sparc-sun
+                               os=
+                               ;;
+                       sun4os3)
+                               basic_machine=sparc-sun
+                               os=sunos3
+                               ;;
+                       sun4os4)
+                               basic_machine=sparc-sun
+                               os=sunos4
+                               ;;
+                       sun4sol2)
+                               basic_machine=sparc-sun
+                               os=solaris2
+                               ;;
+                       sun386 | sun386i | roadrunner)
+                               basic_machine=i386-sun
+                               os=
+                               ;;
+                       sv1)
+                               basic_machine=sv1-cray
+                               os=unicos
+                               ;;
+                       symmetry)
+                               basic_machine=i386-sequent
+                               os=dynix
+                               ;;
+                       t3e)
+                               basic_machine=alphaev5-cray
+                               os=unicos
+                               ;;
+                       t90)
+                               basic_machine=t90-cray
+                               os=unicos
+                               ;;
+                       toad1)
+                               basic_machine=pdp10-xkl
+                               os=tops20
+                               ;;
+                       tpf)
+                               basic_machine=s390x-ibm
+                               os=tpf
+                               ;;
+                       udi29k)
+                               basic_machine=a29k-amd
+                               os=udi
+                               ;;
+                       ultra3)
+                               basic_machine=a29k-nyu
+                               os=sym1
+                               ;;
+                       v810 | necv810)
+                               basic_machine=v810-nec
+                               os=none
+                               ;;
+                       vaxv)
+                               basic_machine=vax-dec
+                               os=sysv
+                               ;;
+                       vms)
+                               basic_machine=vax-dec
+                               os=vms
+                               ;;
+                       vxworks960)
+                               basic_machine=i960-wrs
+                               os=vxworks
+                               ;;
+                       vxworks68)
+                               basic_machine=m68k-wrs
+                               os=vxworks
+                               ;;
+                       vxworks29k)
+                               basic_machine=a29k-wrs
+                               os=vxworks
+                               ;;
+                       xbox)
+                               basic_machine=i686-pc
+                               os=mingw32
+                               ;;
+                       ymp)
+                               basic_machine=ymp-cray
+                               os=unicos
+                               ;;
+                       *)
+                               basic_machine=$1
+                               os=
+                               ;;
+               esac
                ;;
 esac
 
-# Decode aliases for certain CPU-COMPANY combinations.
+# Decode 1-component or ad-hoc basic machines
 case $basic_machine in
-       # Recognize the basic CPU types without company name.
-       # Some are omitted here because they have special meanings below.
-       1750a | 580 \
-       | a29k \
-       | aarch64 | aarch64_be \
-       | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
-       | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
-       | am33_2.0 \
-       | arc | arceb \
-       | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
-       | avr | avr32 \
-       | ba \
-       | be32 | be64 \
-       | bfin \
-       | c4x | c8051 | clipper \
-       | d10v | d30v | dlx | dsp16xx \
-       | e2k | epiphany \
-       | fido | fr30 | frv | ft32 \
-       | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
-       | hexagon \
-       | i370 | i860 | i960 | ia64 \
-       | ip2k | iq2000 \
-       | k1om \
-       | le32 | le64 \
-       | lm32 \
-       | m32c | m32r | m32rle | m68000 | m68k | m88k \
-       | maxq | mb | microblaze | microblazeel | mcore | mep | metag \
-       | mips | mipsbe | mipseb | mipsel | mipsle \
-       | mips16 \
-       | mips64 | mips64el \
-       | mips64octeon | mips64octeonel \
-       | mips64orion | mips64orionel \
-       | mips64r5900 | mips64r5900el \
-       | mips64vr | mips64vrel \
-       | mips64vr4100 | mips64vr4100el \
-       | mips64vr4300 | mips64vr4300el \
-       | mips64vr5000 | mips64vr5000el \
-       | mips64vr5900 | mips64vr5900el \
-       | mipsisa32 | mipsisa32el \
-       | mipsisa32r2 | mipsisa32r2el \
-       | mipsisa32r6 | mipsisa32r6el \
-       | mipsisa64 | mipsisa64el \
-       | mipsisa64r2 | mipsisa64r2el \
-       | mipsisa64r6 | mipsisa64r6el \
-       | mipsisa64sb1 | mipsisa64sb1el \
-       | mipsisa64sr71k | mipsisa64sr71kel \
-       | mipsr5900 | mipsr5900el \
-       | mipstx39 | mipstx39el \
-       | mn10200 | mn10300 \
-       | moxie \
-       | mt \
-       | msp430 \
-       | nds32 | nds32le | nds32be \
-       | nios | nios2 | nios2eb | nios2el \
-       | ns16k | ns32k \
-       | open8 | or1k | or1knd | or32 \
-       | pdp10 | pdp11 | pj | pjl \
-       | powerpc | powerpc64 | powerpc64le | powerpcle \
-       | pyramid \
-       | riscv32 | riscv64 \
-       | rl78 | rx \
-       | score \
-       | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
-       | sh64 | sh64le \
-       | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
-       | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
-       | spu \
-       | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
-       | ubicom32 \
-       | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
-       | visium \
-       | we32k \
-       | x86 | xc16x | xstormy16 | xtensa \
-       | z8k | z80)
-               basic_machine=$basic_machine-unknown
-               ;;
-       c54x)
-               basic_machine=tic54x-unknown
-               ;;
-       c55x)
-               basic_machine=tic55x-unknown
-               ;;
-       c6x)
-               basic_machine=tic6x-unknown
-               ;;
-       leon|leon[3-9])
-               basic_machine=sparc-$basic_machine
-               ;;
-       m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
-               basic_machine=$basic_machine-unknown
-               os=-none
+       # Here we handle the default manufacturer of certain CPU types.  It is in
+       # some cases the only manufacturer, in others, it is the most popular.
+       w89k)
+               cpu=hppa1.1
+               vendor=winbond
                ;;
-       m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+       op50n)
+               cpu=hppa1.1
+               vendor=oki
                ;;
-       ms1)
-               basic_machine=mt-unknown
+       op60c)
+               cpu=hppa1.1
+               vendor=oki
                ;;
-
-       strongarm | thumb | xscale)
-               basic_machine=arm-unknown
+       ibm*)
+               cpu=i370
+               vendor=ibm
                ;;
-       xgate)
-               basic_machine=$basic_machine-unknown
-               os=-none
+       orion105)
+               cpu=clipper
+               vendor=highlevel
                ;;
-       xscaleeb)
-               basic_machine=armeb-unknown
+       mac | mpw | mac-mpw)
+               cpu=m68k
+               vendor=apple
                ;;
-
-       xscaleel)
-               basic_machine=armel-unknown
+       pmac | pmac-mpw)
+               cpu=powerpc
+               vendor=apple
                ;;
 
-       # We use `pc' rather than `unknown'
-       # because (1) that's what they normally are, and
-       # (2) the word "unknown" tends to confuse beginning users.
-       i*86 | x86_64)
-         basic_machine=$basic_machine-pc
-         ;;
-       # Object if more than one company name word.
-       *-*-*)
-               echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
-               exit 1
-               ;;
-       # Recognize the basic CPU types with company name.
-       580-* \
-       | a29k-* \
-       | aarch64-* | aarch64_be-* \
-       | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
-       | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
-       | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
-       | arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
-       | avr-* | avr32-* \
-       | ba-* \
-       | be32-* | be64-* \
-       | bfin-* | bs2000-* \
-       | c[123]* | c30-* | [cjt]90-* | c4x-* \
-       | c8051-* | clipper-* | craynv-* | cydra-* \
-       | d10v-* | d30v-* | dlx-* \
-       | e2k-* | elxsi-* \
-       | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
-       | h8300-* | h8500-* \
-       | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
-       | hexagon-* \
-       | i*86-* | i860-* | i960-* | ia64-* \
-       | ip2k-* | iq2000-* \
-       | k1om-* \
-       | le32-* | le64-* \
-       | lm32-* \
-       | m32c-* | m32r-* | m32rle-* \
-       | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
-       | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
-       | microblaze-* | microblazeel-* \
-       | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
-       | mips16-* \
-       | mips64-* | mips64el-* \
-       | mips64octeon-* | mips64octeonel-* \
-       | mips64orion-* | mips64orionel-* \
-       | mips64r5900-* | mips64r5900el-* \
-       | mips64vr-* | mips64vrel-* \
-       | mips64vr4100-* | mips64vr4100el-* \
-       | mips64vr4300-* | mips64vr4300el-* \
-       | mips64vr5000-* | mips64vr5000el-* \
-       | mips64vr5900-* | mips64vr5900el-* \
-       | mipsisa32-* | mipsisa32el-* \
-       | mipsisa32r2-* | mipsisa32r2el-* \
-       | mipsisa32r6-* | mipsisa32r6el-* \
-       | mipsisa64-* | mipsisa64el-* \
-       | mipsisa64r2-* | mipsisa64r2el-* \
-       | mipsisa64r6-* | mipsisa64r6el-* \
-       | mipsisa64sb1-* | mipsisa64sb1el-* \
-       | mipsisa64sr71k-* | mipsisa64sr71kel-* \
-       | mipsr5900-* | mipsr5900el-* \
-       | mipstx39-* | mipstx39el-* \
-       | mmix-* \
-       | mt-* \
-       | msp430-* \
-       | nds32-* | nds32le-* | nds32be-* \
-       | nios-* | nios2-* | nios2eb-* | nios2el-* \
-       | none-* | np1-* | ns16k-* | ns32k-* \
-       | open8-* \
-       | or1k*-* \
-       | orion-* \
-       | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
-       | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
-       | pyramid-* \
-       | riscv32-* | riscv64-* \
-       | rl78-* | romp-* | rs6000-* | rx-* \
-       | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
-       | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
-       | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
-       | sparclite-* \
-       | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \
-       | tahoe-* \
-       | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
-       | tile*-* \
-       | tron-* \
-       | ubicom32-* \
-       | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
-       | vax-* \
-       | visium-* \
-       | we32k-* \
-       | x86-* | x86_64-* | xc16x-* | xps100-* \
-       | xstormy16-* | xtensa*-* \
-       | ymp-* \
-       | z8k-* | z80-*)
-               ;;
-       # Recognize the basic CPU types without company name, with glob match.
-       xtensa*)
-               basic_machine=$basic_machine-unknown
-               ;;
        # Recognize the various machine names and aliases which stand
        # for a CPU type and a company and sometimes even an OS.
-       386bsd)
-               basic_machine=i386-unknown
-               os=-bsd
-               ;;
        3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
-               basic_machine=m68000-att
+               cpu=m68000
+               vendor=att
                ;;
        3b*)
-               basic_machine=we32k-att
-               ;;
-       a29khif)
-               basic_machine=a29k-amd
-               os=-udi
-               ;;
-       abacus)
-               basic_machine=abacus-unknown
-               ;;
-       adobe68k)
-               basic_machine=m68010-adobe
-               os=-scout
-               ;;
-       alliant | fx80)
-               basic_machine=fx80-alliant
-               ;;
-       altos | altos3068)
-               basic_machine=m68k-altos
-               ;;
-       am29k)
-               basic_machine=a29k-none
-               os=-bsd
-               ;;
-       amd64)
-               basic_machine=x86_64-pc
-               ;;
-       amd64-*)
-               basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       amdahl)
-               basic_machine=580-amdahl
-               os=-sysv
-               ;;
-       amiga | amiga-*)
-               basic_machine=m68k-unknown
-               ;;
-       amigaos | amigados)
-               basic_machine=m68k-unknown
-               os=-amigaos
-               ;;
-       amigaunix | amix)
-               basic_machine=m68k-unknown
-               os=-sysv4
-               ;;
-       apollo68)
-               basic_machine=m68k-apollo
-               os=-sysv
-               ;;
-       apollo68bsd)
-               basic_machine=m68k-apollo
-               os=-bsd
-               ;;
-       aros)
-               basic_machine=i386-pc
-               os=-aros
-               ;;
-       asmjs)
-               basic_machine=asmjs-unknown
-               ;;
-       aux)
-               basic_machine=m68k-apple
-               os=-aux
-               ;;
-       balance)
-               basic_machine=ns32k-sequent
-               os=-dynix
-               ;;
-       blackfin)
-               basic_machine=bfin-unknown
-               os=-linux
-               ;;
-       blackfin-*)
-               basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
-               os=-linux
+               cpu=we32k
+               vendor=att
                ;;
        bluegene*)
-               basic_machine=powerpc-ibm
-               os=-cnk
-               ;;
-       c54x-*)
-               basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       c55x-*)
-               basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       c6x-*)
-               basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       c90)
-               basic_machine=c90-cray
-               os=-unicos
-               ;;
-       cegcc)
-               basic_machine=arm-unknown
-               os=-cegcc
-               ;;
-       convex-c1)
-               basic_machine=c1-convex
-               os=-bsd
-               ;;
-       convex-c2)
-               basic_machine=c2-convex
-               os=-bsd
-               ;;
-       convex-c32)
-               basic_machine=c32-convex
-               os=-bsd
-               ;;
-       convex-c34)
-               basic_machine=c34-convex
-               os=-bsd
-               ;;
-       convex-c38)
-               basic_machine=c38-convex
-               os=-bsd
-               ;;
-       cray | j90)
-               basic_machine=j90-cray
-               os=-unicos
-               ;;
-       craynv)
-               basic_machine=craynv-cray
-               os=-unicosmp
-               ;;
-       cr16 | cr16-*)
-               basic_machine=cr16-unknown
-               os=-elf
-               ;;
-       crds | unos)
-               basic_machine=m68k-crds
-               ;;
-       crisv32 | crisv32-* | etraxfs*)
-               basic_machine=crisv32-axis
-               ;;
-       cris | cris-* | etrax*)
-               basic_machine=cris-axis
-               ;;
-       crx)
-               basic_machine=crx-unknown
-               os=-elf
-               ;;
-       da30 | da30-*)
-               basic_machine=m68k-da30
-               ;;
-       decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
-               basic_machine=mips-dec
+               cpu=powerpc
+               vendor=ibm
+               os=cnk
                ;;
        decsystem10* | dec10*)
-               basic_machine=pdp10-dec
-               os=-tops10
+               cpu=pdp10
+               vendor=dec
+               os=tops10
                ;;
        decsystem20* | dec20*)
-               basic_machine=pdp10-dec
-               os=-tops20
+               cpu=pdp10
+               vendor=dec
+               os=tops20
                ;;
        delta | 3300 | motorola-3300 | motorola-delta \
              | 3300-motorola | delta-motorola)
-               basic_machine=m68k-motorola
-               ;;
-       delta88)
-               basic_machine=m88k-motorola
-               os=-sysv3
-               ;;
-       dicos)
-               basic_machine=i686-pc
-               os=-dicos
-               ;;
-       djgpp)
-               basic_machine=i586-pc
-               os=-msdosdjgpp
-               ;;
-       dpx20 | dpx20-*)
-               basic_machine=rs6000-bull
-               os=-bosx
-               ;;
-       dpx2* | dpx2*-bull)
-               basic_machine=m68k-bull
-               os=-sysv3
-               ;;
-       e500v[12])
-               basic_machine=powerpc-unknown
-               os=$os"spe"
-               ;;
-       e500v[12]-*)
-               basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
-               os=$os"spe"
+               cpu=m68k
+               vendor=motorola
                ;;
-       ebmon29k)
-               basic_machine=a29k-amd
-               os=-ebmon
-               ;;
-       elxsi)
-               basic_machine=elxsi-elxsi
-               os=-bsd
+       dpx2*)
+               cpu=m68k
+               vendor=bull
+               os=sysv3
                ;;
        encore | umax | mmax)
-               basic_machine=ns32k-encore
+               cpu=ns32k
+               vendor=encore
                ;;
-       es1800 | OSE68k | ose68k | ose | OSE)
-               basic_machine=m68k-ericsson
-               os=-ose
+       elxsi)
+               cpu=elxsi
+               vendor=elxsi
+               os=${os:-bsd}
                ;;
        fx2800)
-               basic_machine=i860-alliant
+               cpu=i860
+               vendor=alliant
                ;;
        genix)
-               basic_machine=ns32k-ns
-               ;;
-       gmicro)
-               basic_machine=tron-gmicro
-               os=-sysv
-               ;;
-       go32)
-               basic_machine=i386-pc
-               os=-go32
+               cpu=ns32k
+               vendor=ns
                ;;
        h3050r* | hiux*)
-               basic_machine=hppa1.1-hitachi
-               os=-hiuxwe2
-               ;;
-       h8300hms)
-               basic_machine=h8300-hitachi
-               os=-hms
-               ;;
-       h8300xray)
-               basic_machine=h8300-hitachi
-               os=-xray
-               ;;
-       h8500hms)
-               basic_machine=h8500-hitachi
-               os=-hms
-               ;;
-       harris)
-               basic_machine=m88k-harris
-               os=-sysv3
-               ;;
-       hp300-*)
-               basic_machine=m68k-hp
-               ;;
-       hp300bsd)
-               basic_machine=m68k-hp
-               os=-bsd
-               ;;
-       hp300hpux)
-               basic_machine=m68k-hp
-               os=-hpux
+               cpu=hppa1.1
+               vendor=hitachi
+               os=hiuxwe2
                ;;
        hp3k9[0-9][0-9] | hp9[0-9][0-9])
-               basic_machine=hppa1.0-hp
+               cpu=hppa1.0
+               vendor=hp
                ;;
        hp9k2[0-9][0-9] | hp9k31[0-9])
-               basic_machine=m68000-hp
+               cpu=m68000
+               vendor=hp
                ;;
        hp9k3[2-9][0-9])
-               basic_machine=m68k-hp
+               cpu=m68k
+               vendor=hp
                ;;
        hp9k6[0-9][0-9] | hp6[0-9][0-9])
-               basic_machine=hppa1.0-hp
+               cpu=hppa1.0
+               vendor=hp
                ;;
        hp9k7[0-79][0-9] | hp7[0-79][0-9])
-               basic_machine=hppa1.1-hp
+               cpu=hppa1.1
+               vendor=hp
                ;;
        hp9k78[0-9] | hp78[0-9])
                # FIXME: really hppa2.0-hp
-               basic_machine=hppa1.1-hp
+               cpu=hppa1.1
+               vendor=hp
                ;;
        hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
                # FIXME: really hppa2.0-hp
-               basic_machine=hppa1.1-hp
+               cpu=hppa1.1
+               vendor=hp
                ;;
        hp9k8[0-9][13679] | hp8[0-9][13679])
-               basic_machine=hppa1.1-hp
+               cpu=hppa1.1
+               vendor=hp
                ;;
        hp9k8[0-9][0-9] | hp8[0-9][0-9])
-               basic_machine=hppa1.0-hp
-               ;;
-       hppa-next)
-               os=-nextstep3
-               ;;
-       hppaosf)
-               basic_machine=hppa1.1-hp
-               os=-osf
-               ;;
-       hppro)
-               basic_machine=hppa1.1-hp
-               os=-proelf
-               ;;
-       i370-ibm* | ibm*)
-               basic_machine=i370-ibm
+               cpu=hppa1.0
+               vendor=hp
                ;;
        i*86v32)
-               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-               os=-sysv32
+               cpu=`echo "$1" | sed -e 's/86.*/86/'`
+               vendor=pc
+               os=sysv32
                ;;
        i*86v4*)
-               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-               os=-sysv4
+               cpu=`echo "$1" | sed -e 's/86.*/86/'`
+               vendor=pc
+               os=sysv4
                ;;
        i*86v)
-               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-               os=-sysv
+               cpu=`echo "$1" | sed -e 's/86.*/86/'`
+               vendor=pc
+               os=sysv
                ;;
        i*86sol2)
-               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-               os=-solaris2
+               cpu=`echo "$1" | sed -e 's/86.*/86/'`
+               vendor=pc
+               os=solaris2
                ;;
-       i386mach)
-               basic_machine=i386-mach
-               os=-mach
-               ;;
-       i386-vsta | vsta)
-               basic_machine=i386-unknown
-               os=-vsta
+       j90 | j90-cray)
+               cpu=j90
+               vendor=cray
+               os=${os:-unicos}
                ;;
        iris | iris4d)
-               basic_machine=mips-sgi
+               cpu=mips
+               vendor=sgi
                case $os in
-                   -irix*)
+                   irix*)
                        ;;
                    *)
-                       os=-irix4
+                       os=irix4
                        ;;
                esac
                ;;
-       isi68 | isi)
-               basic_machine=m68k-isi
-               os=-sysv
-               ;;
-       leon-*|leon[3-9]-*)
-               basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'`
-               ;;
-       m68knommu)
-               basic_machine=m68k-unknown
-               os=-linux
-               ;;
-       m68knommu-*)
-               basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
-               os=-linux
-               ;;
-       m88k-omron*)
-               basic_machine=m88k-omron
-               ;;
-       magnum | m3230)
-               basic_machine=mips-mips
-               os=-sysv
-               ;;
-       merlin)
-               basic_machine=ns32k-utek
-               os=-sysv
-               ;;
-       microblaze*)
-               basic_machine=microblaze-xilinx
-               ;;
-       mingw64)
-               basic_machine=x86_64-pc
-               os=-mingw64
-               ;;
-       mingw32)
-               basic_machine=i686-pc
-               os=-mingw32
-               ;;
-       mingw32ce)
-               basic_machine=arm-unknown
-               os=-mingw32ce
-               ;;
        miniframe)
-               basic_machine=m68000-convergent
-               ;;
-       *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
-               basic_machine=m68k-atari
-               os=-mint
-               ;;
-       mips3*-*)
-               basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
-               ;;
-       mips3*)
-               basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
-               ;;
-       monitor)
-               basic_machine=m68k-rom68k
-               os=-coff
-               ;;
-       morphos)
-               basic_machine=powerpc-unknown
-               os=-morphos
-               ;;
-       moxiebox)
-               basic_machine=moxie-unknown
-               os=-moxiebox
-               ;;
-       msdos)
-               basic_machine=i386-pc
-               os=-msdos
-               ;;
-       ms1-*)
-               basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
-               ;;
-       msys)
-               basic_machine=i686-pc
-               os=-msys
-               ;;
-       mvs)
-               basic_machine=i370-ibm
-               os=-mvs
+               cpu=m68000
+               vendor=convergent
                ;;
-       nacl)
-               basic_machine=le32-unknown
-               os=-nacl
-               ;;
-       ncr3000)
-               basic_machine=i486-ncr
-               os=-sysv4
-               ;;
-       netbsd386)
-               basic_machine=i386-unknown
-               os=-netbsd
-               ;;
-       netwinder)
-               basic_machine=armv4l-rebel
-               os=-linux
-               ;;
-       news | news700 | news800 | news900)
-               basic_machine=m68k-sony
-               os=-newsos
-               ;;
-       news1000)
-               basic_machine=m68030-sony
-               os=-newsos
+       *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*)
+               cpu=m68k
+               vendor=atari
+               os=mint
                ;;
        news-3600 | risc-news)
-               basic_machine=mips-sony
-               os=-newsos
-               ;;
-       necv70)
-               basic_machine=v70-nec
-               os=-sysv
+               cpu=mips
+               vendor=sony
+               os=newsos
                ;;
-       next | m*-next )
-               basic_machine=m68k-next
+       next | m*-next)
+               cpu=m68k
+               vendor=next
                case $os in
-                   -nextstep* )
+                   nextstep* )
                        ;;
-                   -ns2*)
-                     os=-nextstep2
+                   ns2*)
+                     os=nextstep2
                        ;;
                    *)
-                     os=-nextstep3
+                     os=nextstep3
                        ;;
                esac
                ;;
-       nh3000)
-               basic_machine=m68k-harris
-               os=-cxux
-               ;;
-       nh[45]000)
-               basic_machine=m88k-harris
-               os=-cxux
-               ;;
-       nindy960)
-               basic_machine=i960-intel
-               os=-nindy
-               ;;
-       mon960)
-               basic_machine=i960-intel
-               os=-mon960
-               ;;
-       nonstopux)
-               basic_machine=mips-compaq
-               os=-nonstopux
-               ;;
        np1)
-               basic_machine=np1-gould
-               ;;
-       neo-tandem)
-               basic_machine=neo-tandem
-               ;;
-       nse-tandem)
-               basic_machine=nse-tandem
-               ;;
-       nsr-tandem)
-               basic_machine=nsr-tandem
+               cpu=np1
+               vendor=gould
                ;;
        op50n-* | op60c-*)
-               basic_machine=hppa1.1-oki
-               os=-proelf
-               ;;
-       openrisc | openrisc-*)
-               basic_machine=or32-unknown
-               ;;
-       os400)
-               basic_machine=powerpc-ibm
-               os=-os400
-               ;;
-       OSE68000 | ose68000)
-               basic_machine=m68000-ericsson
-               os=-ose
-               ;;
-       os68k)
-               basic_machine=m68k-none
-               os=-os68k
+               cpu=hppa1.1
+               vendor=oki
+               os=proelf
                ;;
        pa-hitachi)
-               basic_machine=hppa1.1-hitachi
-               os=-hiuxwe2
-               ;;
-       paragon)
-               basic_machine=i860-intel
-               os=-osf
-               ;;
-       parisc)
-               basic_machine=hppa-unknown
-               os=-linux
-               ;;
-       parisc-*)
-               basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
-               os=-linux
+               cpu=hppa1.1
+               vendor=hitachi
+               os=hiuxwe2
                ;;
        pbd)
-               basic_machine=sparc-tti
+               cpu=sparc
+               vendor=tti
                ;;
        pbb)
-               basic_machine=m68k-tti
-               ;;
-       pc532 | pc532-*)
-               basic_machine=ns32k-pc532
+               cpu=m68k
+               vendor=tti
                ;;
-       pc98)
-               basic_machine=i386-pc
-               ;;
-       pc98-*)
-               basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       pentium | p5 | k5 | k6 | nexgen | viac3)
-               basic_machine=i586-pc
-               ;;
-       pentiumpro | p6 | 6x86 | athlon | athlon_*)
-               basic_machine=i686-pc
-               ;;
-       pentiumii | pentium2 | pentiumiii | pentium3)
-               basic_machine=i686-pc
-               ;;
-       pentium4)
-               basic_machine=i786-pc
-               ;;
-       pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
-               basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       pentiumpro-* | p6-* | 6x86-* | athlon-*)
-               basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
-               basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       pentium4-*)
-               basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+       pc532)
+               cpu=ns32k
+               vendor=pc532
                ;;
        pn)
-               basic_machine=pn-gould
+               cpu=pn
+               vendor=gould
                ;;
-       power)  basic_machine=power-ibm
-               ;;
-       ppc | ppcbe)    basic_machine=powerpc-unknown
-               ;;
-       ppc-* | ppcbe-*)
-               basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       ppcle | powerpclittle)
-               basic_machine=powerpcle-unknown
-               ;;
-       ppcle-* | powerpclittle-*)
-               basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       ppc64)  basic_machine=powerpc64-unknown
-               ;;
-       ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       ppc64le | powerpc64little)
-               basic_machine=powerpc64le-unknown
-               ;;
-       ppc64le-* | powerpc64little-*)
-               basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+       power)
+               cpu=power
+               vendor=ibm
                ;;
        ps2)
-               basic_machine=i386-ibm
-               ;;
-       pw32)
-               basic_machine=i586-unknown
-               os=-pw32
-               ;;
-       rdos | rdos64)
-               basic_machine=x86_64-pc
-               os=-rdos
-               ;;
-       rdos32)
-               basic_machine=i386-pc
-               os=-rdos
-               ;;
-       rom68k)
-               basic_machine=m68k-rom68k
-               os=-coff
+               cpu=i386
+               vendor=ibm
                ;;
        rm[46]00)
-               basic_machine=mips-siemens
+               cpu=mips
+               vendor=siemens
                ;;
        rtpc | rtpc-*)
-               basic_machine=romp-ibm
-               ;;
-       s390 | s390-*)
-               basic_machine=s390-ibm
-               ;;
-       s390x | s390x-*)
-               basic_machine=s390x-ibm
+               cpu=romp
+               vendor=ibm
                ;;
-       sa29200)
-               basic_machine=a29k-amd
-               os=-udi
+       sde)
+               cpu=mipsisa32
+               vendor=sde
+               os=${os:-elf}
                ;;
-       sb1)
-               basic_machine=mipsisa64sb1-unknown
+       simso-wrs)
+               cpu=sparclite
+               vendor=wrs
+               os=vxworks
                ;;
-       sb1el)
-               basic_machine=mipsisa64sb1el-unknown
+       tower | tower-32)
+               cpu=m68k
+               vendor=ncr
                ;;
-       sde)
-               basic_machine=mipsisa32-sde
-               os=-elf
+       vpp*|vx|vx-*)
+               cpu=f301
+               vendor=fujitsu
                ;;
-       sei)
-               basic_machine=mips-sei
-               os=-seiux
+       w65)
+               cpu=w65
+               vendor=wdc
                ;;
-       sequent)
-               basic_machine=i386-sequent
+       w89k-*)
+               cpu=hppa1.1
+               vendor=winbond
+               os=proelf
                ;;
-       sh)
-               basic_machine=sh-hitachi
-               os=-hms
+       none)
+               cpu=none
+               vendor=none
                ;;
-       sh5el)
-               basic_machine=sh5le-unknown
+       leon|leon[3-9])
+               cpu=sparc
+               vendor=$basic_machine
                ;;
-       sh64)
-               basic_machine=sh64-unknown
+       leon-*|leon[3-9]-*)
+               cpu=sparc
+               vendor=`echo "$basic_machine" | sed 's/-.*//'`
                ;;
-       sparclite-wrs | simso-wrs)
-               basic_machine=sparclite-wrs
-               os=-vxworks
+
+       *-*)
+               IFS="-" read -r cpu vendor <<EOF
+$basic_machine
+EOF
                ;;
-       sps7)
-               basic_machine=m68k-bull
-               os=-sysv2
+       # We use `pc' rather than `unknown'
+       # because (1) that's what they normally are, and
+       # (2) the word "unknown" tends to confuse beginning users.
+       i*86 | x86_64)
+               cpu=$basic_machine
+               vendor=pc
                ;;
-       spur)
-               basic_machine=spur-unknown
+       # These rules are duplicated from below for sake of the special case above;
+       # i.e. things that normalized to x86 arches should also default to "pc"
+       pc98)
+               cpu=i386
+               vendor=pc
                ;;
-       st2000)
-               basic_machine=m68k-tandem
+       x64 | amd64)
+               cpu=x86_64
+               vendor=pc
                ;;
-       stratus)
-               basic_machine=i860-stratus
-               os=-sysv4
+       # Recognize the basic CPU types without company name.
+       *)
+               cpu=$basic_machine
+               vendor=unknown
                ;;
-       strongarm-* | thumb-*)
-               basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
+esac
+
+unset -v basic_machine
+
+# Decode basic machines in the full and proper CPU-Company form.
+case $cpu-$vendor in
+       # Here we handle the default manufacturer of certain CPU types in cannonical form. It is in
+       # some cases the only manufacturer, in others, it is the most popular.
+       craynv-unknown)
+               vendor=cray
+               os=${os:-unicosmp}
                ;;
-       sun2)
-               basic_machine=m68000-sun
+       c90-unknown | c90-cray)
+               vendor=cray
+               os=${os:-unicos}
                ;;
-       sun2os3)
-               basic_machine=m68000-sun
-               os=-sunos3
+       fx80-unknown)
+               vendor=alliant
                ;;
-       sun2os4)
-               basic_machine=m68000-sun
-               os=-sunos4
+       romp-unknown)
+               vendor=ibm
                ;;
-       sun3os3)
-               basic_machine=m68k-sun
-               os=-sunos3
+       mmix-unknown)
+               vendor=knuth
                ;;
-       sun3os4)
-               basic_machine=m68k-sun
-               os=-sunos4
+       microblaze-unknown | microblazeel-unknown)
+               vendor=xilinx
                ;;
-       sun4os3)
-               basic_machine=sparc-sun
-               os=-sunos3
+       rs6000-unknown)
+               vendor=ibm
                ;;
-       sun4os4)
-               basic_machine=sparc-sun
-               os=-sunos4
+       vax-unknown)
+               vendor=dec
                ;;
-       sun4sol2)
-               basic_machine=sparc-sun
-               os=-solaris2
+       pdp11-unknown)
+               vendor=dec
                ;;
-       sun3 | sun3-*)
-               basic_machine=m68k-sun
+       we32k-unknown)
+               vendor=att
                ;;
-       sun4)
-               basic_machine=sparc-sun
+       cydra-unknown)
+               vendor=cydrome
                ;;
-       sun386 | sun386i | roadrunner)
-               basic_machine=i386-sun
+       i370-ibm*)
+               vendor=ibm
                ;;
-       sv1)
-               basic_machine=sv1-cray
-               os=-unicos
+       orion-unknown)
+               vendor=highlevel
                ;;
-       symmetry)
-               basic_machine=i386-sequent
-               os=-dynix
+       xps-unknown | xps100-unknown)
+               cpu=xps100
+               vendor=honeywell
                ;;
-       t3e)
-               basic_machine=alphaev5-cray
-               os=-unicos
+
+       # Here we normalize CPU types with a missing or matching vendor
+       dpx20-unknown | dpx20-bull)
+               cpu=rs6000
+               vendor=bull
+               os=${os:-bosx}
                ;;
-       t90)
-               basic_machine=t90-cray
-               os=-unicos
+
+       # Here we normalize CPU types irrespective of the vendor
+       amd64-*)
+               cpu=x86_64
                ;;
-       tile*)
-               basic_machine=$basic_machine-unknown
-               os=-linux-gnu
+       blackfin-*)
+               cpu=bfin
+               os=linux
                ;;
-       tx39)
-               basic_machine=mipstx39-unknown
+       c54x-*)
+               cpu=tic54x
                ;;
-       tx39el)
-               basic_machine=mipstx39el-unknown
+       c55x-*)
+               cpu=tic55x
                ;;
-       toad1)
-               basic_machine=pdp10-xkl
-               os=-tops20
+       c6x-*)
+               cpu=tic6x
                ;;
-       tower | tower-32)
-               basic_machine=m68k-ncr
+       e500v[12]-*)
+               cpu=powerpc
+               os=$os"spe"
                ;;
-       tpf)
-               basic_machine=s390x-ibm
-               os=-tpf
+       mips3*-*)
+               cpu=mips64
                ;;
-       udi29k)
-               basic_machine=a29k-amd
-               os=-udi
+       ms1-*)
+               cpu=mt
                ;;
-       ultra3)
-               basic_machine=a29k-nyu
-               os=-sym1
+       m68knommu-*)
+               cpu=m68k
+               os=linux
                ;;
-       v810 | necv810)
-               basic_machine=v810-nec
-               os=-none
+       m9s12z-* | m68hcs12z-* | hcs12z-* | s12z-*)
+               cpu=s12z
                ;;
-       vaxv)
-               basic_machine=vax-dec
-               os=-sysv
+       openrisc-*)
+               cpu=or32
                ;;
-       vms)
-               basic_machine=vax-dec
-               os=-vms
+       parisc-*)
+               cpu=hppa
+               os=linux
                ;;
-       vpp*|vx|vx-*)
-               basic_machine=f301-fujitsu
+       pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+               cpu=i586
                ;;
-       vxworks960)
-               basic_machine=i960-wrs
-               os=-vxworks
+       pentiumpro-* | p6-* | 6x86-* | athlon-* | athalon_*-*)
+               cpu=i686
                ;;
-       vxworks68)
-               basic_machine=m68k-wrs
-               os=-vxworks
+       pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+               cpu=i686
                ;;
-       vxworks29k)
-               basic_machine=a29k-wrs
-               os=-vxworks
+       pentium4-*)
+               cpu=i786
                ;;
-       w65*)
-               basic_machine=w65-wdc
-               os=-none
+       pc98-*)
+               cpu=i386
                ;;
-       w89k-*)
-               basic_machine=hppa1.1-winbond
-               os=-proelf
+       ppc-* | ppcbe-*)
+               cpu=powerpc
                ;;
-       xbox)
-               basic_machine=i686-pc
-               os=-mingw32
+       ppcle-* | powerpclittle-*)
+               cpu=powerpcle
                ;;
-       xps | xps100)
-               basic_machine=xps100-honeywell
+       ppc64-*)
+               cpu=powerpc64
                ;;
-       xscale-* | xscalee[bl]-*)
-               basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`
+       ppc64le-* | powerpc64little-*)
+               cpu=powerpc64le
                ;;
-       ymp)
-               basic_machine=ymp-cray
-               os=-unicos
+       sb1-*)
+               cpu=mipsisa64sb1
                ;;
-       z8k-*-coff)
-               basic_machine=z8k-unknown
-               os=-sim
+       sb1el-*)
+               cpu=mipsisa64sb1el
                ;;
-       z80-*-coff)
-               basic_machine=z80-unknown
-               os=-sim
+       sh5e[lb]-*)
+               cpu=`echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/'`
                ;;
-       none)
-               basic_machine=none-none
-               os=-none
+       spur-*)
+               cpu=spur
                ;;
-
-# Here we handle the default manufacturer of certain CPU types.  It is in
-# some cases the only manufacturer, in others, it is the most popular.
-       w89k)
-               basic_machine=hppa1.1-winbond
+       strongarm-* | thumb-*)
+               cpu=arm
                ;;
-       op50n)
-               basic_machine=hppa1.1-oki
+       tx39-*)
+               cpu=mipstx39
                ;;
-       op60c)
-               basic_machine=hppa1.1-oki
+       tx39el-*)
+               cpu=mipstx39el
                ;;
-       romp)
-               basic_machine=romp-ibm
+       x64-*)
+               cpu=x86_64
                ;;
-       mmix)
-               basic_machine=mmix-knuth
-               ;;
-       rs6000)
-               basic_machine=rs6000-ibm
+       xscale-* | xscalee[bl]-*)
+               cpu=`echo "$cpu" | sed 's/^xscale/arm/'`
                ;;
-       vax)
-               basic_machine=vax-dec
+
+       # Recognize the cannonical CPU Types that limit and/or modify the
+       # company names they are paired with.
+       cr16-*)
+               os=${os:-elf}
                ;;
-       pdp10)
-               # there are many clones, so DEC is not a safe bet
-               basic_machine=pdp10-unknown
+       crisv32-* | etraxfs*-*)
+               cpu=crisv32
+               vendor=axis
                ;;
-       pdp11)
-               basic_machine=pdp11-dec
+       cris-* | etrax*-*)
+               cpu=cris
+               vendor=axis
                ;;
-       we32k)
-               basic_machine=we32k-att
+       crx-*)
+               os=${os:-elf}
                ;;
-       sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
-               basic_machine=sh-unknown
+       neo-tandem)
+               cpu=neo
+               vendor=tandem
                ;;
-       sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
-               basic_machine=sparc-sun
+       nse-tandem)
+               cpu=nse
+               vendor=tandem
                ;;
-       cydra)
-               basic_machine=cydra-cydrome
+       nsr-tandem)
+               cpu=nsr
+               vendor=tandem
                ;;
-       orion)
-               basic_machine=orion-highlevel
+       nsv-tandem)
+               cpu=nsv
+               vendor=tandem
                ;;
-       orion105)
-               basic_machine=clipper-highlevel
+       nsx-tandem)
+               cpu=nsx
+               vendor=tandem
                ;;
-       mac | mpw | mac-mpw)
-               basic_machine=m68k-apple
+       s390-*)
+               cpu=s390
+               vendor=ibm
                ;;
-       pmac | pmac-mpw)
-               basic_machine=powerpc-apple
+       s390x-*)
+               cpu=s390x
+               vendor=ibm
                ;;
-       *-unknown)
-               # Make sure to match an already-canonicalized machine name.
+       tile*-*)
+               os=${os:-linux-gnu}
                ;;
+
        *)
-               echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
-               exit 1
+               # Recognize the cannonical CPU types that are allowed with any
+               # company name.
+               case $cpu in
+                       1750a | 580 \
+                       | a29k \
+                       | aarch64 | aarch64_be \
+                       | abacus \
+                       | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] \
+                       | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] \
+                       | alphapca5[67] | alpha64pca5[67] \
+                       | am33_2.0 \
+                       | arc | arceb \
+                       | arm  | arm[lb]e | arme[lb] | armv* \
+                       | avr | avr32 \
+                       | asmjs \
+                       | ba \
+                       | be32 | be64 \
+                       | bfin | bs2000 \
+                       | c[123]* | c30 | [cjt]90 | c4x \
+                       | c8051 | clipper | craynv | csky | cydra \
+                       | d10v | d30v | dlx | dsp16xx \
+                       | e2k | elxsi | epiphany \
+                       | f30[01] | f700 | fido | fr30 | frv | ft32 | fx80 \
+                       | h8300 | h8500 \
+                       | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+                       | hexagon \
+                       | i370 | i*86 | i860 | i960 | ia16 | ia64 \
+                       | ip2k | iq2000 \
+                       | k1om \
+                       | le32 | le64 \
+                       | lm32 \
+                       | m32c | m32r | m32rle \
+                       | m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k | v70 | w65 \
+                       | m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip \
+                       | m88110 | m88k | maxq | mb | mcore | mep | metag \
+                       | microblaze | microblazeel \
+                       | mips | mipsbe | mipseb | mipsel | mipsle \
+                       | mips16 \
+                       | mips64 | mips64el \
+                       | mips64octeon | mips64octeonel \
+                       | mips64orion | mips64orionel \
+                       | mips64r5900 | mips64r5900el \
+                       | mips64vr | mips64vrel \
+                       | mips64vr4100 | mips64vr4100el \
+                       | mips64vr4300 | mips64vr4300el \
+                       | mips64vr5000 | mips64vr5000el \
+                       | mips64vr5900 | mips64vr5900el \
+                       | mipsisa32 | mipsisa32el \
+                       | mipsisa32r2 | mipsisa32r2el \
+                       | mipsisa32r6 | mipsisa32r6el \
+                       | mipsisa64 | mipsisa64el \
+                       | mipsisa64r2 | mipsisa64r2el \
+                       | mipsisa64r6 | mipsisa64r6el \
+                       | mipsisa64sb1 | mipsisa64sb1el \
+                       | mipsisa64sr71k | mipsisa64sr71kel \
+                       | mipsr5900 | mipsr5900el \
+                       | mipstx39 | mipstx39el \
+                       | mmix \
+                       | mn10200 | mn10300 \
+                       | moxie \
+                       | mt \
+                       | msp430 \
+                       | nds32 | nds32le | nds32be \
+                       | nfp \
+                       | nios | nios2 | nios2eb | nios2el \
+                       | none | np1 | ns16k | ns32k \
+                       | open8 \
+                       | or1k* \
+                       | or32 \
+                       | orion \
+                       | pdp10 | pdp11 | pj | pjl | pn | power \
+                       | powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \
+                       | pru \
+                       | pyramid \
+                       | riscv | riscv32 | riscv64 \
+                       | rl78 | romp | rs6000 | rx \
+                       | score \
+                       | sh | sh[1234] | sh[24]a | sh[24]ae[lb] | sh[23]e | she[lb] | sh[lb]e \
+                       | sh[1234]e[lb] |  sh[12345][lb]e | sh[23]ele | sh64 | sh64le \
+                       | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet \
+                       | sparclite \
+                       | sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \
+                       | spu \
+                       | tahoe \
+                       | tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \
+                       | tron \
+                       | ubicom32 \
+                       | v850 | v850e | v850e1 | v850es | v850e2 | v850e2v3 \
+                       | vax \
+                       | visium \
+                       | wasm32 \
+                       | we32k \
+                       | x86 | x86_64 | xc16x | xgate | xps100 \
+                       | xstormy16 | xtensa* \
+                       | ymp \
+                       | z8k | z80)
+                               ;;
+
+                       *)
+                               echo Invalid configuration \`"$1"\': machine \`"$cpu-$vendor"\' not recognized 1>&2
+                               exit 1
+                               ;;
+               esac
                ;;
 esac
 
 # Here we canonicalize certain aliases for manufacturers.
-case $basic_machine in
-       *-digital*)
-               basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+case $vendor in
+       digital*)
+               vendor=dec
                ;;
-       *-commodore*)
-               basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+       commodore*)
+               vendor=cbm
                ;;
        *)
                ;;
@@ -1353,200 +1270,246 @@ esac
 
 # Decode manufacturer-specific aliases for certain operating systems.
 
-if [ x"$os" != x"" ]
+if [ x$os != x ]
 then
 case $os in
-       # First match some system type aliases
-       # that might get confused with valid system types.
-       # -solaris* is a basic system type, with this one exception.
-       -auroraux)
-               os=-auroraux
+       # First match some system type aliases that might get confused
+       # with valid system types.
+       # solaris* is a basic system type, with this one exception.
+       auroraux)
+               os=auroraux
                ;;
-       -solaris1 | -solaris1.*)
-               os=`echo $os | sed -e 's|solaris1|sunos4|'`
+       bluegene*)
+               os=cnk
                ;;
-       -solaris)
-               os=-solaris2
+       solaris1 | solaris1.*)
+               os=`echo $os | sed -e 's|solaris1|sunos4|'`
                ;;
-       -svr4*)
-               os=-sysv4
+       solaris)
+               os=solaris2
                ;;
-       -unixware*)
-               os=-sysv4.2uw
+       unixware*)
+               os=sysv4.2uw
                ;;
-       -gnu/linux*)
+       gnu/linux*)
                os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
                ;;
-       # First accept the basic system types.
+       # es1800 is here to avoid being matched by es* (a different OS)
+       es1800*)
+               os=ose
+               ;;
+       # Some version numbers need modification
+       chorusos*)
+               os=chorusos
+               ;;
+       isc)
+               os=isc2.2
+               ;;
+       sco6)
+               os=sco5v6
+               ;;
+       sco5)
+               os=sco3.2v5
+               ;;
+       sco4)
+               os=sco3.2v4
+               ;;
+       sco3.2.[4-9]*)
+               os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+               ;;
+       sco3.2v[4-9]* | sco5v6*)
+               # Don't forget version if it is 3.2v4 or newer.
+               ;;
+       scout)
+               # Don't match below
+               ;;
+       sco*)
+               os=sco3.2v2
+               ;;
+       psos*)
+               os=psos
+               ;;
+       # Now accept the basic system types.
        # The portable systems comes first.
-       # Each alternative MUST END IN A *, to match a version number.
-       # -sysv* is not here because it comes later, after sysvr4.
-       -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
-             | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
-             | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
-             | -sym* | -kopensolaris* | -plan9* \
-             | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
-             | -aos* | -aros* | -cloudabi* | -sortix* \
-             | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
-             | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
-             | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
-             | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \
-             | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
-             | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
-             | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
-             | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
-             | -chorusos* | -chorusrdb* | -cegcc* \
-             | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-             | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
-             | -linux-newlib* | -linux-musl* | -linux-uclibc* \
-             | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \
-             | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
-             | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
-             | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
-             | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
-             | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
-             | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
-             | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \
-             | -onefs* | -tirtos* | -phoenix*)
+       # Each alternative MUST end in a * to match a version number.
+       # sysv* is not here because it comes later, after sysvr4.
+       gnu* | bsd* | mach* | minix* | genix* | ultrix* | irix* \
+            | *vms* | esix* | aix* | cnk* | sunos | sunos[34]*\
+            | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \
+            | sym* | kopensolaris* | plan9* \
+            | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \
+            | aos* | aros* | cloudabi* | sortix* \
+            | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \
+            | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \
+            | knetbsd* | mirbsd* | netbsd* \
+            | bitrig* | openbsd* | solidbsd* | libertybsd* \
+            | ekkobsd* | kfreebsd* | freebsd* | riscix* | lynxos* \
+            | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \
+            | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \
+            | udi* | eabi* | lites* | ieee* | go32* | aux* | hcos* \
+            | chorusrdb* | cegcc* | glidix* \
+            | cygwin* | msys* | pe* | moss* | proelf* | rtems* \
+            | midipix* | mingw32* | mingw64* | linux-gnu* | linux-android* \
+            | linux-newlib* | linux-musl* | linux-uclibc* \
+            | uxpv* | beos* | mpeix* | udk* | moxiebox* \
+            | interix* | uwin* | mks* | rhapsody* | darwin* \
+            | openstep* | oskit* | conix* | pw32* | nonstopux* \
+            | storm-chaos* | tops10* | tenex* | tops20* | its* \
+            | os2* | vos* | palmos* | uclinux* | nucleus* \
+            | morphos* | superux* | rtmk* | windiss* \
+            | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \
+            | skyos* | haiku* | rdos* | toppers* | drops* | es* \
+            | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \
+            | midnightbsd*)
        # Remember, each alternative MUST END IN *, to match a version number.
                ;;
-       -qnx*)
-               case $basic_machine in
-                   x86-* | i*86-*)
+       qnx*)
+               case $cpu in
+                   x86 | i*86)
                        ;;
                    *)
-                       os=-nto$os
+                       os=nto-$os
                        ;;
                esac
                ;;
-       -nto-qnx*)
+       hiux*)
+               os=hiuxwe2
                ;;
-       -nto*)
-               os=`echo $os | sed -e 's|nto|nto-qnx|'`
+       nto-qnx*)
                ;;
-       -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
-             | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
-             | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+       nto*)
+               os=`echo $os | sed -e 's|nto|nto-qnx|'`
                ;;
-       -mac*)
-               os=`echo $os | sed -e 's|mac|macos|'`
+       sim | xray | os68k* | v88r* \
+           | windows* | osx | abug | netware* | os9* \
+           | macos* | mpw* | magic* | mmixware* | mon960* | lnews*)
                ;;
-       -linux-dietlibc)
-               os=-linux-dietlibc
+       linux-dietlibc)
+               os=linux-dietlibc
                ;;
-       -linux*)
+       linux*)
                os=`echo $os | sed -e 's|linux|linux-gnu|'`
                ;;
-       -sunos5*)
-               os=`echo $os | sed -e 's|sunos5|solaris2|'`
+       lynx*178)
+               os=lynxos178
                ;;
-       -sunos6*)
-               os=`echo $os | sed -e 's|sunos6|solaris3|'`
+       lynx*5)
+               os=lynxos5
                ;;
-       -opened*)
-               os=-openedition
+       lynx*)
+               os=lynxos
                ;;
-       -os400*)
-               os=-os400
+       mac*)
+               os=`echo "$os" | sed -e 's|mac|macos|'`
                ;;
-       -wince*)
-               os=-wince
+       opened*)
+               os=openedition
                ;;
-       -osfrose*)
-               os=-osfrose
+       os400*)
+               os=os400
                ;;
-       -osf*)
-               os=-osf
+       sunos5*)
+               os=`echo "$os" | sed -e 's|sunos5|solaris2|'`
                ;;
-       -utek*)
-               os=-bsd
+       sunos6*)
+               os=`echo "$os" | sed -e 's|sunos6|solaris3|'`
                ;;
-       -dynix*)
-               os=-bsd
+       wince*)
+               os=wince
                ;;
-       -acis*)
-               os=-aos
+       utek*)
+               os=bsd
                ;;
-       -atheos*)
-               os=-atheos
+       dynix*)
+               os=bsd
                ;;
-       -syllable*)
-               os=-syllable
+       acis*)
+               os=aos
                ;;
-       -386bsd)
-               os=-bsd
+       atheos*)
+               os=atheos
                ;;
-       -ctix* | -uts*)
-               os=-sysv
+       syllable*)
+               os=syllable
                ;;
-       -nova*)
-               os=-rtmk-nova
+       386bsd)
+               os=bsd
+               ;;
+       ctix* | uts*)
+               os=sysv
+               ;;
+       nova*)
+               os=rtmk-nova
                ;;
-       -ns2 )
-               os=-nextstep2
+       ns2)
+               os=nextstep2
                ;;
-       -nsk*)
-               os=-nsk
+       nsk*)
+               os=nsk
                ;;
        # Preserve the version number of sinix5.
-       -sinix5.*)
+       sinix5.*)
                os=`echo $os | sed -e 's|sinix|sysv|'`
                ;;
-       -sinix*)
-               os=-sysv4
+       sinix*)
+               os=sysv4
                ;;
-       -tpf*)
-               os=-tpf
+       tpf*)
+               os=tpf
                ;;
-       -triton*)
-               os=-sysv3
+       triton*)
+               os=sysv3
                ;;
-       -oss*)
-               os=-sysv3
+       oss*)
+               os=sysv3
                ;;
-       -svr4)
-               os=-sysv4
+       svr4*)
+               os=sysv4
                ;;
-       -svr3)
-               os=-sysv3
+       svr3)
+               os=sysv3
                ;;
-       -sysvr4)
-               os=-sysv4
+       sysvr4)
+               os=sysv4
                ;;
-       # This must come after -sysvr4.
-       -sysv*)
+       # This must come after sysvr4.
+       sysv*)
                ;;
-       -ose*)
-               os=-ose
+       ose*)
+               os=ose
                ;;
-       -es1800*)
-               os=-ose
+       *mint | mint[0-9]* | *MiNT | MiNT[0-9]*)
+               os=mint
                ;;
-       -xenix)
-               os=-xenix
+       zvmoe)
+               os=zvmoe
                ;;
-       -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
-               os=-mint
+       dicos*)
+               os=dicos
                ;;
-       -aros*)
-               os=-aros
-               ;;
-       -zvmoe)
-               os=-zvmoe
+       pikeos*)
+               # Until real need of OS specific support for
+               # particular features comes up, bare metal
+               # configurations are quite functional.
+               case $cpu in
+                   arm*)
+                       os=eabi
+                       ;;
+                   *)
+                       os=elf
+                       ;;
+               esac
                ;;
-       -dicos*)
-               os=-dicos
+       nacl*)
                ;;
-       -nacl*)
+       ios)
                ;;
-       -ios)
+       none)
                ;;
-       -none)
+       *-eabi)
                ;;
        *)
-               # Get rid of the `-' at the beginning of $os.
-               os=`echo $os | sed 's/[^-]*-//'`
-               echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+               echo Invalid configuration \`"$1"\': system \`"$os"\' not recognized 1>&2
                exit 1
                ;;
 esac
@@ -1562,261 +1525,265 @@ else
 # will signal an error saying that MANUFACTURER isn't an operating
 # system, and we'll never get to this point.
 
-case $basic_machine in
+case $cpu-$vendor in
        score-*)
-               os=-elf
+               os=elf
                ;;
        spu-*)
-               os=-elf
+               os=elf
                ;;
        *-acorn)
-               os=-riscix1.2
+               os=riscix1.2
                ;;
        arm*-rebel)
-               os=-linux
+               os=linux
                ;;
        arm*-semi)
-               os=-aout
+               os=aout
                ;;
        c4x-* | tic4x-*)
-               os=-coff
+               os=coff
                ;;
        c8051-*)
-               os=-elf
+               os=elf
+               ;;
+       clipper-intergraph)
+               os=clix
                ;;
        hexagon-*)
-               os=-elf
+               os=elf
                ;;
        tic54x-*)
-               os=-coff
+               os=coff
                ;;
        tic55x-*)
-               os=-coff
+               os=coff
                ;;
        tic6x-*)
-               os=-coff
+               os=coff
                ;;
        # This must come before the *-dec entry.
        pdp10-*)
-               os=-tops20
+               os=tops20
                ;;
        pdp11-*)
-               os=-none
+               os=none
                ;;
        *-dec | vax-*)
-               os=-ultrix4.2
+               os=ultrix4.2
                ;;
        m68*-apollo)
-               os=-domain
+               os=domain
                ;;
        i386-sun)
-               os=-sunos4.0.2
+               os=sunos4.0.2
                ;;
        m68000-sun)
-               os=-sunos3
+               os=sunos3
                ;;
        m68*-cisco)
-               os=-aout
+               os=aout
                ;;
        mep-*)
-               os=-elf
+               os=elf
                ;;
        mips*-cisco)
-               os=-elf
+               os=elf
                ;;
        mips*-*)
-               os=-elf
+               os=elf
                ;;
        or32-*)
-               os=-coff
+               os=coff
                ;;
        *-tti)  # must be before sparc entry or we get the wrong os.
-               os=-sysv3
+               os=sysv3
                ;;
        sparc-* | *-sun)
-               os=-sunos4.1.1
+               os=sunos4.1.1
                ;;
-       *-be)
-               os=-beos
+       pru-*)
+               os=elf
                ;;
-       *-haiku)
-               os=-haiku
+       *-be)
+               os=beos
                ;;
        *-ibm)
-               os=-aix
+               os=aix
                ;;
        *-knuth)
-               os=-mmixware
+               os=mmixware
                ;;
        *-wec)
-               os=-proelf
+               os=proelf
                ;;
        *-winbond)
-               os=-proelf
+               os=proelf
                ;;
        *-oki)
-               os=-proelf
+               os=proelf
                ;;
        *-hp)
-               os=-hpux
+               os=hpux
                ;;
        *-hitachi)
-               os=-hiux
+               os=hiux
                ;;
        i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
-               os=-sysv
+               os=sysv
                ;;
        *-cbm)
-               os=-amigaos
+               os=amigaos
                ;;
        *-dg)
-               os=-dgux
+               os=dgux
                ;;
        *-dolphin)
-               os=-sysv3
+               os=sysv3
                ;;
        m68k-ccur)
-               os=-rtu
+               os=rtu
                ;;
        m88k-omron*)
-               os=-luna
+               os=luna
                ;;
-       *-next )
-               os=-nextstep
+       *-next)
+               os=nextstep
                ;;
        *-sequent)
-               os=-ptx
+               os=ptx
                ;;
        *-crds)
-               os=-unos
+               os=unos
                ;;
        *-ns)
-               os=-genix
+               os=genix
                ;;
        i370-*)
-               os=-mvs
-               ;;
-       *-next)
-               os=-nextstep3
+               os=mvs
                ;;
        *-gould)
-               os=-sysv
+               os=sysv
                ;;
        *-highlevel)
-               os=-bsd
+               os=bsd
                ;;
        *-encore)
-               os=-bsd
+               os=bsd
                ;;
        *-sgi)
-               os=-irix
+               os=irix
                ;;
        *-siemens)
-               os=-sysv4
+               os=sysv4
                ;;
        *-masscomp)
-               os=-rtu
+               os=rtu
                ;;
        f30[01]-fujitsu | f700-fujitsu)
-               os=-uxpv
+               os=uxpv
                ;;
        *-rom68k)
-               os=-coff
+               os=coff
                ;;
        *-*bug)
-               os=-coff
+               os=coff
                ;;
        *-apple)
-               os=-macos
+               os=macos
                ;;
        *-atari*)
-               os=-mint
+               os=mint
+               ;;
+       *-wrs)
+               os=vxworks
                ;;
        *)
-               os=-none
+               os=none
                ;;
 esac
 fi
 
 # Here we handle the case where we know the os, and the CPU type, but not the
 # manufacturer.  We pick the logical manufacturer.
-vendor=unknown
-case $basic_machine in
-       *-unknown)
+case $vendor in
+       unknown)
                case $os in
-                       -riscix*)
+                       riscix*)
                                vendor=acorn
                                ;;
-                       -sunos*)
+                       sunos*)
                                vendor=sun
                                ;;
-                       -cnk*|-aix*)
+                       cnk*|-aix*)
                                vendor=ibm
                                ;;
-                       -beos*)
+                       beos*)
                                vendor=be
                                ;;
-                       -hpux*)
+                       hpux*)
                                vendor=hp
                                ;;
-                       -mpeix*)
+                       mpeix*)
                                vendor=hp
                                ;;
-                       -hiux*)
+                       hiux*)
                                vendor=hitachi
                                ;;
-                       -unos*)
+                       unos*)
                                vendor=crds
                                ;;
-                       -dgux*)
+                       dgux*)
                                vendor=dg
                                ;;
-                       -luna*)
+                       luna*)
                                vendor=omron
                                ;;
-                       -genix*)
+                       genix*)
                                vendor=ns
                                ;;
-                       -mvs* | -opened*)
+                       clix*)
+                               vendor=intergraph
+                               ;;
+                       mvs* | opened*)
                                vendor=ibm
                                ;;
-                       -os400*)
+                       os400*)
                                vendor=ibm
                                ;;
-                       -ptx*)
+                       ptx*)
                                vendor=sequent
                                ;;
-                       -tpf*)
+                       tpf*)
                                vendor=ibm
                                ;;
-                       -vxsim* | -vxworks* | -windiss*)
+                       vxsim* | vxworks* | windiss*)
                                vendor=wrs
                                ;;
-                       -aux*)
+                       aux*)
                                vendor=apple
                                ;;
-                       -hms*)
+                       hms*)
                                vendor=hitachi
                                ;;
-                       -mpw* | -macos*)
+                       mpw* | macos*)
                                vendor=apple
                                ;;
-                       -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+                       *mint | mint[0-9]* | *MiNT | MiNT[0-9]*)
                                vendor=atari
                                ;;
-                       -vos*)
+                       vos*)
                                vendor=stratus
                                ;;
                esac
-               basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
                ;;
 esac
 
-echo $basic_machine$os
+echo "$cpu-$vendor-$os"
 exit
 
 # Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
+# eval: (add-hook 'before-save-hook 'time-stamp)
 # time-stamp-start: "timestamp='"
 # time-stamp-format: "%:y-%02m-%02d"
 # time-stamp-end: "'"
index 715e34311ed2d2dbff881aedc7e25b81db54614c..6b391623c4bf023255fdbc8eceb7acf110e5fa79 100755 (executable)
@@ -3,7 +3,7 @@
 
 scriptversion=2018-03-07.03; # UTC
 
-# Copyright (C) 1999-2021 Free Software Foundation, Inc.
+# Copyright (C) 1999-2020 Free Software Foundation, Inc.
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index 3606ec0cdf438fc866f5c3ff06839e0a17db1b77..10d27f233e8d91a89b8036ad393c51900560b7e5 100755 (executable)
@@ -3,7 +3,7 @@
 
 scriptversion=2013-07-13.22; # UTC
 
-# Copyright (C) 2011-2020 Free Software Foundation, Inc.
+# Copyright (C) 2011-2023 Free Software Foundation, Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index ec298b53740270ce82b326c4c2deaa5dcdec4596..20d8b2eaea9c7e1a9a83cbae1b770ab021fe114c 100755 (executable)
@@ -1,7 +1,7 @@
 #!/bin/sh
 # install - install a program, script, or datafile
 
-scriptversion=2020-11-14.01; # UTC
+scriptversion=2018-03-11.20; # UTC
 
 # This originates from X11R5 (mit/util/scripts/install.sh), which was
 # later released in X11R6 (xc/config/util/install.sh) with the
@@ -69,11 +69,6 @@ posix_mkdir=
 # Desired mode of installed file.
 mode=0755
 
-# Create dirs (including intermediate dirs) using mode 755.
-# This is like GNU 'install' as of coreutils 8.32 (2020).
-mkdir_umask=22
-
-backupsuffix=
 chgrpcmd=
 chmodcmd=$chmodprog
 chowncmd=
@@ -104,28 +99,18 @@ Options:
      --version  display version info and exit.
 
   -c            (ignored)
-  -C            install only if different (preserve data modification time)
+  -C            install only if different (preserve the last data modification time)
   -d            create directories instead of installing files.
   -g GROUP      $chgrpprog installed files to GROUP.
   -m MODE       $chmodprog installed files to MODE.
   -o USER       $chownprog installed files to USER.
-  -p            pass -p to $cpprog.
   -s            $stripprog installed files.
-  -S SUFFIX     attempt to back up existing files, with suffix SUFFIX.
   -t DIRECTORY  install into DIRECTORY.
   -T            report an error if DSTFILE is a directory.
 
 Environment variables override the default commands:
   CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
   RMPROG STRIPPROG
-
-By default, rm is invoked with -f; when overridden with RMPROG,
-it's up to you to specify -f if you want it.
-
-If -S is not specified, no backups are attempted.
-
-Email bug reports to bug-automake@gnu.org.
-Automake home page: https://www.gnu.org/software/automake/
 "
 
 while test $# -ne 0; do
@@ -152,13 +137,8 @@ while test $# -ne 0; do
     -o) chowncmd="$chownprog $2"
         shift;;
 
-    -p) cpprog="$cpprog -p";;
-
     -s) stripcmd=$stripprog;;
 
-    -S) backupsuffix="$2"
-        shift;;
-
     -t)
         is_target_a_directory=always
         dst_arg=$2
@@ -275,10 +255,6 @@ do
     dstdir=$dst
     test -d "$dstdir"
     dstdir_status=$?
-    # Don't chown directories that already exist.
-    if test $dstdir_status = 0; then
-      chowncmd=""
-    fi
   else
 
     # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
@@ -325,6 +301,22 @@ do
   if test $dstdir_status != 0; then
     case $posix_mkdir in
       '')
+        # Create intermediate dirs using mode 755 as modified by the umask.
+        # This is like FreeBSD 'install' as of 1997-10-28.
+        umask=`umask`
+        case $stripcmd.$umask in
+          # Optimize common cases.
+          *[2367][2367]) mkdir_umask=$umask;;
+          .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
+
+          *[0-7])
+            mkdir_umask=`expr $umask + 22 \
+              - $umask % 100 % 40 + $umask % 20 \
+              - $umask % 10 % 4 + $umask % 2
+            `;;
+          *) mkdir_umask=$umask,go-w;;
+        esac
+
         # With -d, create the new directory with the user-specified mode.
         # Otherwise, rely on $mkdir_umask.
         if test -n "$dir_arg"; then
@@ -334,49 +326,52 @@ do
         fi
 
         posix_mkdir=false
-       # The $RANDOM variable is not portable (e.g., dash).  Use it
-       # here however when possible just to lower collision chance.
-       tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
-
-       trap '
-         ret=$?
-         rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null
-         exit $ret
-       ' 0
-
-       # Because "mkdir -p" follows existing symlinks and we likely work
-       # directly in world-writeable /tmp, make sure that the '$tmpdir'
-       # directory is successfully created first before we actually test
-       # 'mkdir -p'.
-       if (umask $mkdir_umask &&
-           $mkdirprog $mkdir_mode "$tmpdir" &&
-           exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
-       then
-         if test -z "$dir_arg" || {
-              # Check for POSIX incompatibilities with -m.
-              # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
-              # other-writable bit of parent directory when it shouldn't.
-              # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
-              test_tmpdir="$tmpdir/a"
-              ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
-              case $ls_ld_tmpdir in
-                d????-?r-*) different_mode=700;;
-                d????-?--*) different_mode=755;;
-                *) false;;
-              esac &&
-              $mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
-                ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
-                test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
-              }
-            }
-         then posix_mkdir=:
-         fi
-         rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
-       else
-         # Remove any dirs left behind by ancient mkdir implementations.
-         rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
-       fi
-       trap '' 0;;
+        case $umask in
+          *[123567][0-7][0-7])
+            # POSIX mkdir -p sets u+wx bits regardless of umask, which
+            # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+            ;;
+          *)
+            # Note that $RANDOM variable is not portable (e.g. dash);  Use it
+            # here however when possible just to lower collision chance.
+            tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+
+            trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0
+
+            # Because "mkdir -p" follows existing symlinks and we likely work
+            # directly in world-writeable /tmp, make sure that the '$tmpdir'
+            # directory is successfully created first before we actually test
+            # 'mkdir -p' feature.
+            if (umask $mkdir_umask &&
+                $mkdirprog $mkdir_mode "$tmpdir" &&
+                exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
+            then
+              if test -z "$dir_arg" || {
+                   # Check for POSIX incompatibilities with -m.
+                   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+                   # other-writable bit of parent directory when it shouldn't.
+                   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+                   test_tmpdir="$tmpdir/a"
+                   ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
+                   case $ls_ld_tmpdir in
+                     d????-?r-*) different_mode=700;;
+                     d????-?--*) different_mode=755;;
+                     *) false;;
+                   esac &&
+                   $mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
+                     ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
+                     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+                   }
+                 }
+              then posix_mkdir=:
+              fi
+              rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
+            else
+              # Remove any dirs left behind by ancient mkdir implementations.
+              rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
+            fi
+            trap '' 0;;
+        esac;;
     esac
 
     if
@@ -387,7 +382,7 @@ do
     then :
     else
 
-      # mkdir does not conform to POSIX,
+      # The umask is ridiculous, or mkdir does not conform to POSIX,
       # or it failed possibly due to a race condition.  Create the
       # directory the slow way, step by step, checking for races as we go.
 
@@ -416,7 +411,7 @@ do
           prefixes=
         else
           if $posix_mkdir; then
-            (umask $mkdir_umask &&
+            (umask=$mkdir_umask &&
              $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
             # Don't fail if two instances are running concurrently.
             test -d "$prefix" || exit 1
@@ -493,13 +488,6 @@ do
     then
       rm -f "$dsttmp"
     else
-      # If $backupsuffix is set, and the file being installed
-      # already exists, attempt a backup.  Don't worry if it fails,
-      # e.g., if mv doesn't support -f.
-      if test -n "$backupsuffix" && test -f "$dst"; then
-        $doit $mvcmd -f "$dst" "$dst$backupsuffix" 2>/dev/null
-      fi
-
       # Rename the file to the real destination.
       $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
 
@@ -514,9 +502,9 @@ do
         # file should still install successfully.
         {
           test ! -f "$dst" ||
-          $doit $rmcmd "$dst" 2>/dev/null ||
+          $doit $rmcmd -f "$dst" 2>/dev/null ||
           { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
-            { $doit $rmcmd "$rmtmp" 2>/dev/null; :; }
+            { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
           } ||
           { echo "$0: cannot unlink or rename $dst" >&2
             (exit 1); exit 1
index 49fcad1365c6d8b8d69f8bf217851e1331e4cd39..7f3523d335c55eb0716d11eca34426a237c08027 100644 (file)
@@ -1,12 +1,12 @@
-#! /usr/bin/env sh
+#! /bin/sh
 ## DO NOT EDIT - This file generated from ./build-aux/ltmain.in
-##               by inline-source v2019-02-19.15
+##               by inline-source v2014-01-03.01
 
-# libtool (GNU libtool) 2.4.7
+# libtool (GNU libtool) 2.4.6
 # Provide generalized library-building support services.
 # Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
 
-# Copyright (C) 1996-2019, 2021-2022 Free Software Foundation, Inc.
+# Copyright (C) 1996-2015 Free Software Foundation, Inc.
 # This is free software; see the source for copying conditions.  There is NO
 # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
@@ -31,8 +31,8 @@
 
 PROGRAM=libtool
 PACKAGE=libtool
-VERSION=2.4.7
-package_revision=2.4.7
+VERSION=2.4.6
+package_revision=2.4.6
 
 
 ## ------ ##
@@ -64,25 +64,34 @@ package_revision=2.4.7
 # libraries, which are installed to $pkgauxdir.
 
 # Set a version string for this script.
-scriptversion=2019-02-19.15; # UTC
+scriptversion=2015-01-20.17; # UTC
 
 # General shell script boiler plate, and helper functions.
 # Written by Gary V. Vaughan, 2004
 
-# This is free software.  There is NO warranty; not even for
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-#
-# Copyright (C) 2004-2019, 2021 Bootstrap Authors
-#
-# This file is dual licensed under the terms of the MIT license
-# <https://opensource.org/license/MIT>, and GPL version 2 or later
-# <http://www.gnu.org/licenses/gpl-2.0.html>.  You must apply one of
-# these licenses when using or redistributing this software or any of
-# the files within it.  See the URLs above, or the file `LICENSE`
-# included in the Bootstrap distribution for the full license texts.
+# Copyright (C) 2004-2015 Free Software Foundation, Inc.
+# This is free software; see the source for copying conditions.  There is NO
+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+
+# As a special exception to the GNU General Public License, if you distribute
+# this file as part of a program or library that is built using GNU Libtool,
+# you may include this file under the same distribution terms that you use
+# for the rest of that program.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
 
-# Please report bugs or propose patches to:
-# <https://github.com/gnulib-modules/bootstrap/issues>
+# Please report bugs or propose patches to gary@gnu.org.
 
 
 ## ------ ##
@@ -130,12 +139,9 @@ do
          _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\"
        fi"
 done
-# These NLS vars are set unconditionally (bootstrap issue #24).  Unset those
-# in case the environment reset is needed later and the $save_* variant is not
-# defined (see the code above).
-LC_ALL=C
-LANGUAGE=C
-export LANGUAGE LC_ALL
+
+# CDPATH.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
 
 # Make sure IFS has a sensible default
 sp=' '
@@ -153,26 +159,6 @@ if test "${PATH_SEPARATOR+set}" != set; then
 fi
 
 
-# func_unset VAR
-# --------------
-# Portably unset VAR.
-# In some shells, an 'unset VAR' statement leaves a non-zero return
-# status if VAR is already unset, which might be problematic if the
-# statement is used at the end of a function (thus poisoning its return
-# value) or when 'set -e' is active (causing even a spurious abort of
-# the script in this case).
-func_unset ()
-{
-    { eval $1=; (eval unset $1) >/dev/null 2>&1 && eval unset $1 || : ; }
-}
-
-
-# Make sure CDPATH doesn't cause `cd` commands to output the target dir.
-func_unset CDPATH
-
-# Make sure ${,E,F}GREP behave sanely.
-func_unset GREP_OPTIONS
-
 
 ## ------------------------- ##
 ## Locate command utilities. ##
@@ -273,7 +259,7 @@ test -z "$SED" && {
     rm -f conftest.in conftest.tmp conftest.nl conftest.out
   }
 
-  func_path_progs "sed gsed" func_check_prog_sed "$PATH:/usr/xpg4/bin"
+  func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin
   rm -f conftest.sed
   SED=$func_path_progs_result
 }
@@ -309,7 +295,7 @@ test -z "$GREP" && {
     rm -f conftest.in conftest.tmp conftest.nl conftest.out
   }
 
-  func_path_progs "grep ggrep" func_check_prog_grep "$PATH:/usr/xpg4/bin"
+  func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin
   GREP=$func_path_progs_result
 }
 
@@ -374,35 +360,6 @@ sed_double_backslash="\
   s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g
   s/\n//g"
 
-# require_check_ifs_backslash
-# ---------------------------
-# Check if we can use backslash as IFS='\' separator, and set
-# $check_ifs_backshlash_broken to ':' or 'false'.
-require_check_ifs_backslash=func_require_check_ifs_backslash
-func_require_check_ifs_backslash ()
-{
-  _G_save_IFS=$IFS
-  IFS='\'
-  _G_check_ifs_backshlash='a\\b'
-  for _G_i in $_G_check_ifs_backshlash
-  do
-  case $_G_i in
-  a)
-    check_ifs_backshlash_broken=false
-    ;;
-  '')
-    break
-    ;;
-  *)
-    check_ifs_backshlash_broken=:
-    break
-    ;;
-  esac
-  done
-  IFS=$_G_save_IFS
-  require_check_ifs_backslash=:
-}
-
 
 ## ----------------- ##
 ## Global variables. ##
@@ -623,16 +580,16 @@ if test yes = "$_G_HAVE_PLUSEQ_OP"; then
   {
     $debug_cmd
 
-    func_quote_arg pretty "$2"
-    eval "$1+=\\ \$func_quote_arg_result"
+    func_quote_for_eval "$2"
+    eval "$1+=\\ \$func_quote_for_eval_result"
   }'
 else
   func_append_quoted ()
   {
     $debug_cmd
 
-    func_quote_arg pretty "$2"
-    eval "$1=\$$1\\ \$func_quote_arg_result"
+    func_quote_for_eval "$2"
+    eval "$1=\$$1\\ \$func_quote_for_eval_result"
   }
 fi
 
@@ -1134,203 +1091,85 @@ func_relative_path ()
 }
 
 
-# func_quote_portable EVAL ARG
-# ----------------------------
-# Internal function to portably implement func_quote_arg.  Note that we still
-# keep attention to performance here so we as much as possible try to avoid
-# calling sed binary (so far O(N) complexity as long as func_append is O(1)).
-func_quote_portable ()
+# func_quote_for_eval ARG...
+# --------------------------
+# Aesthetically quote ARGs to be evaled later.
+# This function returns two values:
+#   i) func_quote_for_eval_result
+#      double-quoted, suitable for a subsequent eval
+#  ii) func_quote_for_eval_unquoted_result
+#      has all characters that are still active within double
+#      quotes backslashified.
+func_quote_for_eval ()
 {
     $debug_cmd
 
-    $require_check_ifs_backslash
-
-    func_quote_portable_result=$2
-
-    # one-time-loop (easy break)
-    while true
-    do
-      if $1; then
-        func_quote_portable_result=`$ECHO "$2" | $SED \
-          -e "$sed_double_quote_subst" -e "$sed_double_backslash"`
-        break
-      fi
-
-      # Quote for eval.
-      case $func_quote_portable_result in
+    func_quote_for_eval_unquoted_result=
+    func_quote_for_eval_result=
+    while test 0 -lt $#; do
+      case $1 in
         *[\\\`\"\$]*)
-          # Fallback to sed for $func_check_bs_ifs_broken=:, or when the string
-          # contains the shell wildcard characters.
-          case $check_ifs_backshlash_broken$func_quote_portable_result in
-            :*|*[\[\*\?]*)
-              func_quote_portable_result=`$ECHO "$func_quote_portable_result" \
-                  | $SED "$sed_quote_subst"`
-              break
-              ;;
-          esac
+         _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;;
+        *)
+          _G_unquoted_arg=$1 ;;
+      esac
+      if test -n "$func_quote_for_eval_unquoted_result"; then
+       func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg"
+      else
+        func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg"
+      fi
 
-          func_quote_portable_old_IFS=$IFS
-          for _G_char in '\' '`' '"' '$'
-          do
-            # STATE($1) PREV($2) SEPARATOR($3)
-            set start "" ""
-            func_quote_portable_result=dummy"$_G_char$func_quote_portable_result$_G_char"dummy
-            IFS=$_G_char
-            for _G_part in $func_quote_portable_result
-            do
-              case $1 in
-              quote)
-                func_append func_quote_portable_result "$3$2"
-                set quote "$_G_part" "\\$_G_char"
-                ;;
-              start)
-                set first "" ""
-                func_quote_portable_result=
-                ;;
-              first)
-                set quote "$_G_part" ""
-                ;;
-              esac
-            done
-          done
-          IFS=$func_quote_portable_old_IFS
+      case $_G_unquoted_arg in
+        # Double-quote args containing shell metacharacters to delay
+        # word splitting, command substitution and variable expansion
+        # for a subsequent eval.
+        # Many Bourne shells cannot handle close brackets correctly
+        # in scan sets, so we specify it separately.
+        *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \  ]*|*]*|"")
+          _G_quoted_arg=\"$_G_unquoted_arg\"
           ;;
-        *) ;;
+        *)
+          _G_quoted_arg=$_G_unquoted_arg
+         ;;
       esac
-      break
-    done
 
-    func_quote_portable_unquoted_result=$func_quote_portable_result
-    case $func_quote_portable_result in
-      # double-quote args containing shell metacharacters to delay
-      # word splitting, command substitution and variable expansion
-      # for a subsequent eval.
-      # many bourne shells cannot handle close brackets correctly
-      # in scan sets, so we specify it separately.
-      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \    ]*|*]*|"")
-        func_quote_portable_result=\"$func_quote_portable_result\"
-        ;;
-    esac
+      if test -n "$func_quote_for_eval_result"; then
+       func_append func_quote_for_eval_result " $_G_quoted_arg"
+      else
+        func_append func_quote_for_eval_result "$_G_quoted_arg"
+      fi
+      shift
+    done
 }
 
 
-# func_quotefast_eval ARG
-# -----------------------
-# Quote one ARG (internal).  This is equivalent to 'func_quote_arg eval ARG',
-# but optimized for speed.  Result is stored in $func_quotefast_eval.
-if test xyes = `(x=; printf -v x %q yes; echo x"$x") 2>/dev/null`; then
-  printf -v _GL_test_printf_tilde %q '~'
-  if test '\~' = "$_GL_test_printf_tilde"; then
-    func_quotefast_eval ()
-    {
-      printf -v func_quotefast_eval_result %q "$1"
-    }
-  else
-    # Broken older Bash implementations.  Make those faster too if possible.
-    func_quotefast_eval ()
-    {
-      case $1 in
-        '~'*)
-          func_quote_portable false "$1"
-          func_quotefast_eval_result=$func_quote_portable_result
-          ;;
-        *)
-          printf -v func_quotefast_eval_result %q "$1"
-          ;;
-      esac
-    }
-  fi
-else
-  func_quotefast_eval ()
-  {
-    func_quote_portable false "$1"
-    func_quotefast_eval_result=$func_quote_portable_result
-  }
-fi
-
+# func_quote_for_expand ARG
+# -------------------------
+# Aesthetically quote ARG to be evaled later; same as above,
+# but do not quote variable references.
+func_quote_for_expand ()
+{
+    $debug_cmd
 
-# func_quote_arg MODEs ARG
-# ------------------------
-# Quote one ARG to be evaled later.  MODEs argument may contain zero or more
-# specifiers listed below separated by ',' character.  This function returns two
-# values:
-#   i) func_quote_arg_result
-#      double-quoted (when needed), suitable for a subsequent eval
-#  ii) func_quote_arg_unquoted_result
-#      has all characters that are still active within double
-#      quotes backslashified.  Available only if 'unquoted' is specified.
-#
-# Available modes:
-# ----------------
-# 'eval' (default)
-#       - escape shell special characters
-# 'expand'
-#       - the same as 'eval';  but do not quote variable references
-# 'pretty'
-#       - request aesthetic output, i.e. '"a b"' instead of 'a\ b'.  This might
-#         be used later in func_quote to get output like: 'echo "a b"' instead
-#         of 'echo a\ b'.  This is slower than default on some shells.
-# 'unquoted'
-#       - produce also $func_quote_arg_unquoted_result which does not contain
-#         wrapping double-quotes.
-#
-# Examples for 'func_quote_arg pretty,unquoted string':
-#
-#   string      | *_result              | *_unquoted_result
-#   ------------+-----------------------+-------------------
-#   "           | \"                    | \"
-#   a b         | "a b"                 | a b
-#   "a b"       | "\"a b\""             | \"a b\"
-#   *           | "*"                   | *
-#   z="${x-$y}" | "z=\"\${x-\$y}\""     | z=\"\${x-\$y}\"
-#
-# Examples for 'func_quote_arg pretty,unquoted,expand string':
-#
-#   string        |   *_result          |  *_unquoted_result
-#   --------------+---------------------+--------------------
-#   z="${x-$y}"   | "z=\"${x-$y}\""     | z=\"${x-$y}\"
-func_quote_arg ()
-{
-    _G_quote_expand=false
-    case ,$1, in
-      *,expand,*)
-        _G_quote_expand=:
-        ;;
+    case $1 in
+      *[\\\`\"]*)
+       _G_arg=`$ECHO "$1" | $SED \
+           -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;;
+      *)
+        _G_arg=$1 ;;
     esac
 
-    case ,$1, in
-      *,pretty,*|*,expand,*|*,unquoted,*)
-        func_quote_portable $_G_quote_expand "$2"
-        func_quote_arg_result=$func_quote_portable_result
-        func_quote_arg_unquoted_result=$func_quote_portable_unquoted_result
-        ;;
-      *)
-        # Faster quote-for-eval for some shells.
-        func_quotefast_eval "$2"
-        func_quote_arg_result=$func_quotefast_eval_result
+    case $_G_arg in
+      # Double-quote args containing shell metacharacters to delay
+      # word splitting and command substitution for a subsequent eval.
+      # Many Bourne shells cannot handle close brackets correctly
+      # in scan sets, so we specify it separately.
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \    ]*|*]*|"")
+        _G_arg=\"$_G_arg\"
         ;;
     esac
-}
 
-
-# func_quote MODEs ARGs...
-# ------------------------
-# Quote all ARGs to be evaled later and join them into single command.  See
-# func_quote_arg's description for more info.
-func_quote ()
-{
-    $debug_cmd
-    _G_func_quote_mode=$1 ; shift
-    func_quote_result=
-    while test 0 -lt $#; do
-      func_quote_arg "$_G_func_quote_mode" "$1"
-      if test -n "$func_quote_result"; then
-        func_append func_quote_result " $func_quote_arg_result"
-      else
-        func_append func_quote_result "$func_quote_arg_result"
-      fi
-      shift
-    done
+    func_quote_for_expand_result=$_G_arg
 }
 
 
@@ -1376,8 +1215,8 @@ func_show_eval ()
     _G_cmd=$1
     _G_fail_exp=${2-':'}
 
-    func_quote_arg pretty,expand "$_G_cmd"
-    eval "func_notquiet $func_quote_arg_result"
+    func_quote_for_expand "$_G_cmd"
+    eval "func_notquiet $func_quote_for_expand_result"
 
     $opt_dry_run || {
       eval "$_G_cmd"
@@ -1402,8 +1241,8 @@ func_show_eval_locale ()
     _G_fail_exp=${2-':'}
 
     $opt_quiet || {
-      func_quote_arg expand,pretty "$_G_cmd"
-      eval "func_echo $func_quote_arg_result"
+      func_quote_for_expand "$_G_cmd"
+      eval "func_echo $func_quote_for_expand_result"
     }
 
     $opt_dry_run || {
@@ -1530,26 +1369,30 @@ func_lt_ver ()
 # End:
 #! /bin/sh
 
+# Set a version string for this script.
+scriptversion=2014-01-07.03; # UTC
+
 # A portable, pluggable option parser for Bourne shell.
 # Written by Gary V. Vaughan, 2010
 
-# This is free software.  There is NO warranty; not even for
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-#
-# Copyright (C) 2010-2019, 2021 Bootstrap Authors
-#
-# This file is dual licensed under the terms of the MIT license
-# <https://opensource.org/license/MIT>, and GPL version 2 or later
-# <http://www.gnu.org/licenses/gpl-2.0.html>.  You must apply one of
-# these licenses when using or redistributing this software or any of
-# the files within it.  See the URLs above, or the file `LICENSE`
-# included in the Bootstrap distribution for the full license texts.
+# Copyright (C) 2010-2015 Free Software Foundation, Inc.
+# This is free software; see the source for copying conditions.  There is NO
+# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
-# Please report bugs or propose patches to:
-# <https://github.com/gnulib-modules/bootstrap/issues>
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
 
-# Set a version string for this script.
-scriptversion=2019-02-19.15; # UTC
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# Please report bugs or propose patches to gary@gnu.org.
 
 
 ## ------ ##
@@ -1572,7 +1415,7 @@ scriptversion=2019-02-19.15; # UTC
 #
 # In order for the '--version' option to work, you will need to have a
 # suitably formatted comment like the one at the top of this file
-# starting with '# Written by ' and ending with '# Copyright'.
+# starting with '# Written by ' and ending with '# warranty; '.
 #
 # For '-h' and '--help' to work, you will also need a one line
 # description of your script's purpose in a comment directly above the
@@ -1584,7 +1427,7 @@ scriptversion=2019-02-19.15; # UTC
 # to display verbose messages only when your user has specified
 # '--verbose'.
 #
-# After sourcing this file, you can plug in processing for additional
+# After sourcing this file, you can plug processing for additional
 # options by amending the variables from the 'Configuration' section
 # below, and following the instructions in the 'Option parsing'
 # section further down.
@@ -1633,8 +1476,8 @@ fatal_help="Try '\$progname --help' for more information."
 ## ------------------------- ##
 
 # This section contains functions for adding, removing, and running hooks
-# in the main code.  A hook is just a list of function names that can be
-# run in order later on.
+# to the main code.  A hook is just a named list of of function, that can
+# be run in order later on.
 
 # func_hookable FUNC_NAME
 # -----------------------
@@ -1667,8 +1510,7 @@ func_add_hook ()
 
 # func_remove_hook FUNC_NAME HOOK_FUNC
 # ------------------------------------
-# Remove HOOK_FUNC from the list of hook functions to be called by
-# FUNC_NAME.
+# Remove HOOK_FUNC from the list of functions called by FUNC_NAME.
 func_remove_hook ()
 {
     $debug_cmd
@@ -1677,28 +1519,10 @@ func_remove_hook ()
 }
 
 
-# func_propagate_result FUNC_NAME_A FUNC_NAME_B
-# ---------------------------------------------
-# If the *_result variable of FUNC_NAME_A _is set_, assign its value to
-# *_result variable of FUNC_NAME_B.
-func_propagate_result ()
-{
-    $debug_cmd
-
-    func_propagate_result_result=:
-    if eval "test \"\${${1}_result+set}\" = set"
-    then
-      eval "${2}_result=\$${1}_result"
-    else
-      func_propagate_result_result=false
-    fi
-}
-
-
 # func_run_hooks FUNC_NAME [ARG]...
 # ---------------------------------
 # Run all hook functions registered to FUNC_NAME.
-# It's assumed that the list of hook functions contains nothing more
+# It is assumed that the list of hook functions contains nothing more
 # than a whitespace-delimited list of legal shell function names, and
 # no effort is wasted trying to catch shell meta-characters or preserve
 # whitespace.
@@ -1708,19 +1532,22 @@ func_run_hooks ()
 
     case " $hookable_fns " in
       *" $1 "*) ;;
-      *) func_fatal_error "'$1' does not support hook functions." ;;
+      *) func_fatal_error "'$1' does not support hook funcions.n" ;;
     esac
 
     eval _G_hook_fns=\$$1_hooks; shift
 
     for _G_hook in $_G_hook_fns; do
-      func_unset "${_G_hook}_result"
-      eval $_G_hook '${1+"$@"}'
-      func_propagate_result $_G_hook func_run_hooks
-      if $func_propagate_result_result; then
-        eval set dummy "$func_run_hooks_result"; shift
-      fi
+      eval $_G_hook '"$@"'
+
+      # store returned options list back into positional
+      # parameters for next 'cmd' execution.
+      eval _G_hook_result=\$${_G_hook}_result
+      eval set dummy "$_G_hook_result"; shift
     done
+
+    func_quote_for_eval ${1+"$@"}
+    func_run_hooks_result=$func_quote_for_eval_result
 }
 
 
@@ -1730,18 +1557,10 @@ func_run_hooks ()
 ## --------------- ##
 
 # In order to add your own option parsing hooks, you must accept the
-# full positional parameter list from your hook function.  You may remove
-# or edit any options that you action, and then pass back the remaining
-# unprocessed options in '<hooked_function_name>_result', escaped
-# suitably for 'eval'.
-#
-# The '<hooked_function_name>_result' variable is automatically unset
-# before your hook gets called; for best performance, only set the
-# *_result variable when necessary (i.e. don't call the 'func_quote'
-# function unnecessarily because it can be an expensive operation on some
-# machines).
-#
-# Like this:
+# full positional parameter list in your hook function, remove any
+# options that you action, and then pass back the remaining unprocessed
+# options in '<hooked_function_name>_result', escaped suitably for
+# 'eval'.  Like this:
 #
 #    my_options_prep ()
 #    {
@@ -1751,8 +1570,9 @@ func_run_hooks ()
 #        usage_message=$usage_message'
 #      -s, --silent       don'\''t print informational messages
 #    '
-#        # No change in '$@' (ignored completely by this hook).  Leave
-#        # my_options_prep_result variable intact.
+#
+#        func_quote_for_eval ${1+"$@"}
+#        my_options_prep_result=$func_quote_for_eval_result
 #    }
 #    func_add_hook func_options_prep my_options_prep
 #
@@ -1761,36 +1581,25 @@ func_run_hooks ()
 #    {
 #        $debug_cmd
 #
-#        args_changed=false
-#
-#        # Note that, for efficiency, we parse as many options as we can
+#        # Note that for efficiency, we parse as many options as we can
 #        # recognise in a loop before passing the remainder back to the
 #        # caller on the first unrecognised argument we encounter.
 #        while test $# -gt 0; do
 #          opt=$1; shift
 #          case $opt in
-#            --silent|-s) opt_silent=:
-#                         args_changed=:
-#                         ;;
+#            --silent|-s) opt_silent=: ;;
 #            # Separate non-argument short options:
 #            -s*)         func_split_short_opt "$_G_opt"
 #                         set dummy "$func_split_short_opt_name" \
 #                             "-$func_split_short_opt_arg" ${1+"$@"}
 #                         shift
-#                         args_changed=:
 #                         ;;
-#            *)           # Make sure the first unrecognised option "$_G_opt"
-#                         # is added back to "$@" in case we need it later,
-#                         # if $args_changed was set to 'true'.
-#                         set dummy "$_G_opt" ${1+"$@"}; shift; break ;;
+#            *)            set dummy "$_G_opt" "$*"; shift; break ;;
 #          esac
 #        done
 #
-#        # Only call 'func_quote' here if we processed at least one argument.
-#        if $args_changed; then
-#          func_quote eval ${1+"$@"}
-#          my_silent_option_result=$func_quote_result
-#        fi
+#        func_quote_for_eval ${1+"$@"}
+#        my_silent_option_result=$func_quote_for_eval_result
 #    }
 #    func_add_hook func_parse_options my_silent_option
 #
@@ -1801,26 +1610,17 @@ func_run_hooks ()
 #
 #        $opt_silent && $opt_verbose && func_fatal_help "\
 #    '--silent' and '--verbose' options are mutually exclusive."
+#
+#        func_quote_for_eval ${1+"$@"}
+#        my_option_validation_result=$func_quote_for_eval_result
 #    }
 #    func_add_hook func_validate_options my_option_validation
 #
-# You'll also need to manually amend $usage_message to reflect the extra
+# You'll alse need to manually amend $usage_message to reflect the extra
 # options you parse.  It's preferable to append if you can, so that
 # multiple option parsing hooks can be added safely.
 
 
-# func_options_finish [ARG]...
-# ----------------------------
-# Finishing the option parse loop (call 'func_options' hooks ATM).
-func_options_finish ()
-{
-    $debug_cmd
-
-    func_run_hooks func_options ${1+"$@"}
-    func_propagate_result func_run_hooks func_options_finish
-}
-
-
 # func_options [ARG]...
 # ---------------------
 # All the functions called inside func_options are hookable. See the
@@ -1830,27 +1630,17 @@ func_options ()
 {
     $debug_cmd
 
-    _G_options_quoted=false
+    func_options_prep ${1+"$@"}
+    eval func_parse_options \
+        ${func_options_prep_result+"$func_options_prep_result"}
+    eval func_validate_options \
+        ${func_parse_options_result+"$func_parse_options_result"}
 
-    for my_func in options_prep parse_options validate_options options_finish
-    do
-      func_unset func_${my_func}_result
-      func_unset func_run_hooks_result
-      eval func_$my_func '${1+"$@"}'
-      func_propagate_result func_$my_func func_options
-      if $func_propagate_result_result; then
-        eval set dummy "$func_options_result"; shift
-        _G_options_quoted=:
-      fi
-    done
+    eval func_run_hooks func_options \
+        ${func_validate_options_result+"$func_validate_options_result"}
 
-    $_G_options_quoted || {
-      # As we (func_options) are top-level options-parser function and
-      # nobody quoted "$@" for us yet, we need to do it explicitly for
-      # caller.
-      func_quote eval ${1+"$@"}
-      func_options_result=$func_quote_result
-    }
+    # save modified positional parameters for caller
+    func_options_result=$func_run_hooks_result
 }
 
 
@@ -1859,8 +1649,9 @@ func_options ()
 # All initialisations required before starting the option parse loop.
 # Note that when calling hook functions, we pass through the list of
 # positional parameters.  If a hook function modifies that list, and
-# needs to propagate that back to rest of this script, then the complete
-# modified list must be put in 'func_run_hooks_result' before returning.
+# needs to propogate that back to rest of this script, then the complete
+# modified list must be put in 'func_run_hooks_result' before
+# returning.
 func_hookable func_options_prep
 func_options_prep ()
 {
@@ -1871,7 +1662,9 @@ func_options_prep ()
     opt_warning_types=
 
     func_run_hooks func_options_prep ${1+"$@"}
-    func_propagate_result func_run_hooks func_options_prep
+
+    # save modified positional parameters for caller
+    func_options_prep_result=$func_run_hooks_result
 }
 
 
@@ -1883,32 +1676,25 @@ func_parse_options ()
 {
     $debug_cmd
 
-    _G_parse_options_requote=false
+    func_parse_options_result=
+
     # this just eases exit handling
     while test $# -gt 0; do
       # Defer to hook functions for initial option parsing, so they
       # get priority in the event of reusing an option name.
       func_run_hooks func_parse_options ${1+"$@"}
-      func_propagate_result func_run_hooks func_parse_options
-      if $func_propagate_result_result; then
-        eval set dummy "$func_parse_options_result"; shift
-        # Even though we may have changed "$@", we passed the "$@" array
-        # down into the hook and it quoted it for us (because we are in
-        # this if-branch).  No need to quote it again.
-        _G_parse_options_requote=false
-      fi
+
+      # Adjust func_parse_options positional parameters to match
+      eval set dummy "$func_run_hooks_result"; shift
 
       # Break out of the loop if we already parsed every option.
       test $# -gt 0 || break
 
-      # We expect that one of the options parsed in this function matches
-      # and thus we remove _G_opt from "$@" and need to re-quote.
-      _G_match_parse_options=:
       _G_opt=$1
       shift
       case $_G_opt in
         --debug|-x)   debug_cmd='set -x'
-                      func_echo "enabling shell trace mode" >&2
+                      func_echo "enabling shell trace mode"
                       $debug_cmd
                       ;;
 
@@ -1918,10 +1704,7 @@ func_parse_options ()
                      ;;
 
         --warnings|--warning|-W)
-                      if test $# = 0 && func_missing_arg $_G_opt; then
-                        _G_parse_options_requote=:
-                        break
-                      fi
+                      test $# = 0 && func_missing_arg $_G_opt && break
                       case " $warning_categories $1" in
                         *" $1 "*)
                           # trailing space prevents matching last $1 above
@@ -1974,24 +1757,15 @@ func_parse_options ()
                       shift
                       ;;
 
-        --)           _G_parse_options_requote=: ; break ;;
+        --)           break ;;
         -*)           func_fatal_help "unrecognised option: '$_G_opt'" ;;
-        *)            set dummy "$_G_opt" ${1+"$@"}; shift
-                      _G_match_parse_options=false
-                      break
-                      ;;
+        *)            set dummy "$_G_opt" ${1+"$@"}; shift; break ;;
       esac
-
-      if $_G_match_parse_options; then
-        _G_parse_options_requote=:
-      fi
     done
 
-    if $_G_parse_options_requote; then
-      # save modified positional parameters for caller
-      func_quote eval ${1+"$@"}
-      func_parse_options_result=$func_quote_result
-    fi
+    # save modified positional parameters for caller
+    func_quote_for_eval ${1+"$@"}
+    func_parse_options_result=$func_quote_for_eval_result
 }
 
 
@@ -2008,10 +1782,12 @@ func_validate_options ()
     test -n "$opt_warning_types" || opt_warning_types=" $warning_categories"
 
     func_run_hooks func_validate_options ${1+"$@"}
-    func_propagate_result func_run_hooks func_validate_options
 
     # Bail if the options were screwed!
     $exit_cmd $EXIT_FAILURE
+
+    # save modified positional parameters for caller
+    func_validate_options_result=$func_run_hooks_result
 }
 
 
@@ -2067,8 +1843,8 @@ func_missing_arg ()
 
 # func_split_equals STRING
 # ------------------------
-# Set func_split_equals_lhs and func_split_equals_rhs shell variables
-# after splitting STRING at the '=' sign.
+# Set func_split_equals_lhs and func_split_equals_rhs shell variables after
+# splitting STRING at the '=' sign.
 test -z "$_G_HAVE_XSI_OPS" \
     && (eval 'x=a/b/c;
       test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
@@ -2083,9 +1859,8 @@ then
 
       func_split_equals_lhs=${1%%=*}
       func_split_equals_rhs=${1#*=}
-      if test "x$func_split_equals_lhs" = "x$1"; then
-        func_split_equals_rhs=
-      fi
+      test "x$func_split_equals_lhs" = "x$1" \
+        && func_split_equals_rhs=
   }'
 else
   # ...otherwise fall back to using expr, which is often a shell builtin.
@@ -2095,7 +1870,7 @@ else
 
       func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'`
       func_split_equals_rhs=
-      test "x$func_split_equals_lhs=" = "x$1" \
+      test "x$func_split_equals_lhs" = "x$1" \
         || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'`
   }
 fi #func_split_equals
@@ -2121,7 +1896,7 @@ else
   {
       $debug_cmd
 
-      func_split_short_opt_name=`expr "x$1" : 'x\(-.\)'`
+      func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'`
       func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'`
   }
 fi #func_split_short_opt
@@ -2163,44 +1938,31 @@ func_usage_message ()
 # func_version
 # ------------
 # Echo version message to standard output and exit.
-# The version message is extracted from the calling file's header
-# comments, with leading '# ' stripped:
-#   1. First display the progname and version
-#   2. Followed by the header comment line matching  /^# Written by /
-#   3. Then a blank line followed by the first following line matching
-#      /^# Copyright /
-#   4. Immediately followed by any lines between the previous matches,
-#      except lines preceding the intervening completely blank line.
-# For example, see the header comments of this file.
 func_version ()
 {
     $debug_cmd
 
     printf '%s\n' "$progname $scriptversion"
     $SED -n '
-        /^# Written by /!b
-        s|^# ||; p; n
-
-        :fwd2blnk
-        /./ {
-          n
-          b fwd2blnk
+        /(C)/!b go
+        :more
+        /\./!{
+          N
+          s|\n# | |
+          b more
         }
-        p; n
-
-        :holdwrnt
-        s|^# ||
-        s|^# *$||
-        /^Copyright /!{
-          /./H
-          n
-          b holdwrnt
+        :go
+        /^# Written by /,/# warranty; / {
+          s|^# ||
+          s|^# *$||
+          s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2|
+          p
         }
-
-        s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2|
-        G
-        s|\(\n\)\n*|\1|g
-        p; q' < "$progpath"
+        /^# Written by / {
+          s|^# ||
+          p
+        }
+        /^warranty; /q' < "$progpath"
 
     exit $?
 }
@@ -2210,12 +1972,12 @@ func_version ()
 # mode: shell-script
 # sh-indentation: 2
 # eval: (add-hook 'before-save-hook 'time-stamp)
-# time-stamp-pattern: "30/scriptversion=%:y-%02m-%02d.%02H; # UTC"
+# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC"
 # time-stamp-time-zone: "UTC"
 # End:
 
 # Set a version string.
-scriptversion='(GNU libtool) 2.4.7'
+scriptversion='(GNU libtool) 2.4.6'
 
 
 # func_echo ARG...
@@ -2306,7 +2068,7 @@ include the following information:
        compiler:       $LTCC
        compiler flags: $LTCFLAGS
        linker:         $LD (gnu? $with_gnu_ld)
-       version:        $progname (GNU libtool) 2.4.7
+       version:        $progname (GNU libtool) 2.4.6
        automake:       `($AUTOMAKE --version) 2>/dev/null |$SED 1q`
        autoconf:       `($AUTOCONF --version) 2>/dev/null |$SED 1q`
 
@@ -2508,8 +2270,6 @@ libtool_options_prep ()
     nonopt=
     preserve_args=
 
-    _G_rc_lt_options_prep=:
-
     # Shorthand for --mode=foo, only valid as the first argument
     case $1 in
     clean|clea|cle|cl)
@@ -2533,16 +2293,11 @@ libtool_options_prep ()
     uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
       shift; set dummy --mode uninstall ${1+"$@"}; shift
       ;;
-    *)
-      _G_rc_lt_options_prep=false
-      ;;
     esac
 
-    if $_G_rc_lt_options_prep; then
-      # Pass back the list of options.
-      func_quote eval ${1+"$@"}
-      libtool_options_prep_result=$func_quote_result
-    fi
+    # Pass back the list of options.
+    func_quote_for_eval ${1+"$@"}
+    libtool_options_prep_result=$func_quote_for_eval_result
 }
 func_add_hook func_options_prep libtool_options_prep
 
@@ -2554,12 +2309,9 @@ libtool_parse_options ()
 {
     $debug_cmd
 
-    _G_rc_lt_parse_options=false
-
     # Perform our own loop to consume as many options as possible in
     # each iteration.
     while test $# -gt 0; do
-      _G_match_lt_parse_options=:
       _G_opt=$1
       shift
       case $_G_opt in
@@ -2634,20 +2386,15 @@ libtool_parse_options ()
                         func_append preserve_args " $_G_opt"
                         ;;
 
-        # An option not handled by this hook function:
-        *)              set dummy "$_G_opt" ${1+"$@"} ; shift
-                        _G_match_lt_parse_options=false
-                        break
-                        ;;
+       # An option not handled by this hook function:
+        *)             set dummy "$_G_opt" ${1+"$@"};  shift; break  ;;
       esac
-      $_G_match_lt_parse_options && _G_rc_lt_parse_options=:
     done
 
-    if $_G_rc_lt_parse_options; then
-      # save modified positional parameters for caller
-      func_quote eval ${1+"$@"}
-      libtool_parse_options_result=$func_quote_result
-    fi
+
+    # save modified positional parameters for caller
+    func_quote_for_eval ${1+"$@"}
+    libtool_parse_options_result=$func_quote_for_eval_result
 }
 func_add_hook func_parse_options libtool_parse_options
 
@@ -2668,10 +2415,17 @@ libtool_validate_options ()
     # preserve --debug
     test : = "$debug_cmd" || func_append preserve_args " --debug"
 
-    # Keeping compiler generated duplicates in $postdeps and $predeps is not
-    # harmful, and is necessary in a majority of systems that use it to satisfy
-    # symbol dependencies.
-    opt_duplicate_compiler_generated_deps=:
+    case $host in
+      # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452
+      # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788
+      *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*)
+        # don't eliminate duplications in $postdeps and $predeps
+        opt_duplicate_compiler_generated_deps=:
+        ;;
+      *)
+        opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps
+        ;;
+    esac
 
     $opt_help || {
       # Sanity checks first:
@@ -2697,8 +2451,8 @@ libtool_validate_options ()
     }
 
     # Pass back the unparsed argument list
-    func_quote eval ${1+"$@"}
-    libtool_validate_options_result=$func_quote_result
+    func_quote_for_eval ${1+"$@"}
+    libtool_validate_options_result=$func_quote_for_eval_result
 }
 func_add_hook func_validate_options libtool_validate_options
 
@@ -3664,8 +3418,8 @@ func_mode_compile ()
       esac
     done
 
-    func_quote_arg pretty "$libobj"
-    test "X$libobj" != "X$func_quote_arg_result" \
+    func_quote_for_eval "$libobj"
+    test "X$libobj" != "X$func_quote_for_eval_result" \
       && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"'   &()|`$[]' \
       && func_warning "libobj name '$libobj' may not contain shell special characters."
     func_dirname_and_basename "$obj" "/" ""
@@ -3738,8 +3492,8 @@ compiler."
 
     func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
     srcfile=$func_to_tool_file_result
-    func_quote_arg pretty "$srcfile"
-    qsrcfile=$func_quote_arg_result
+    func_quote_for_eval "$srcfile"
+    qsrcfile=$func_quote_for_eval_result
 
     # Only build a PIC object if we are building libtool libraries.
     if test yes = "$build_libtool_libs"; then
@@ -3894,8 +3648,7 @@ This mode accepts the following additional options:
   -prefer-non-pic   try to build non-PIC objects only
   -shared           do not build a '.o' file suitable for static linking
   -static           only build a '.o' file suitable for static linking
-  -Wc,FLAG
-  -Xcompiler FLAG   pass FLAG directly to the compiler
+  -Wc,FLAG          pass FLAG directly to the compiler
 
 COMPILE-COMMAND is a command to be used in creating a 'standard' object file
 from the given SOURCEFILE.
@@ -4001,8 +3754,6 @@ The following components of LINK-COMMAND are treated specially:
   -weak LIBNAME     declare that the target provides the LIBNAME interface
   -Wc,FLAG
   -Xcompiler FLAG   pass linker-specific FLAG directly to the compiler
-  -Wa,FLAG
-  -Xassembler FLAG  pass linker-specific FLAG directly to the assembler
   -Wl,FLAG
   -Xlinker FLAG     pass linker-specific FLAG directly to the linker
   -XCClinker FLAG   pass link-specific FLAG to the compiler driver (CC)
@@ -4345,8 +4096,8 @@ func_mode_install ()
        case $nonopt in *shtool*) :;; *) false;; esac
     then
       # Aesthetically quote it.
-      func_quote_arg pretty "$nonopt"
-      install_prog="$func_quote_arg_result "
+      func_quote_for_eval "$nonopt"
+      install_prog="$func_quote_for_eval_result "
       arg=$1
       shift
     else
@@ -4356,8 +4107,8 @@ func_mode_install ()
 
     # The real first argument should be the name of the installation program.
     # Aesthetically quote it.
-    func_quote_arg pretty "$arg"
-    func_append install_prog "$func_quote_arg_result"
+    func_quote_for_eval "$arg"
+    func_append install_prog "$func_quote_for_eval_result"
     install_shared_prog=$install_prog
     case " $install_prog " in
       *[\\\ /]cp\ *) install_cp=: ;;
@@ -4414,12 +4165,12 @@ func_mode_install ()
       esac
 
       # Aesthetically quote the argument.
-      func_quote_arg pretty "$arg"
-      func_append install_prog " $func_quote_arg_result"
+      func_quote_for_eval "$arg"
+      func_append install_prog " $func_quote_for_eval_result"
       if test -n "$arg2"; then
-       func_quote_arg pretty "$arg2"
+       func_quote_for_eval "$arg2"
       fi
-      func_append install_shared_prog " $func_quote_arg_result"
+      func_append install_shared_prog " $func_quote_for_eval_result"
     done
 
     test -z "$install_prog" && \
@@ -4430,8 +4181,8 @@ func_mode_install ()
 
     if test -n "$install_override_mode" && $no_mode; then
       if $install_cp; then :; else
-       func_quote_arg pretty "$install_override_mode"
-       func_append install_shared_prog " -m $func_quote_arg_result"
+       func_quote_for_eval "$install_override_mode"
+       func_append install_shared_prog " -m $func_quote_for_eval_result"
       fi
     fi
 
@@ -4727,8 +4478,8 @@ func_mode_install ()
                relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
 
                $opt_quiet || {
-                 func_quote_arg expand,pretty "$relink_command"
-                 eval "func_echo $func_quote_arg_result"
+                 func_quote_for_expand "$relink_command"
+                 eval "func_echo $func_quote_for_expand_result"
                }
                if eval "$relink_command"; then :
                  else
@@ -5507,8 +5258,7 @@ else
   if test \"\$libtool_execute_magic\" != \"$magic\"; then
     file=\"\$0\""
 
-    func_quote_arg pretty "$ECHO"
-    qECHO=$func_quote_arg_result
+    qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"`
     $ECHO "\
 
 # A function that is used when there is no print builtin or printf.
@@ -5518,7 +5268,7 @@ func_fallback_echo ()
 \$1
 _LTECHO_EOF'
 }
-    ECHO=$qECHO
+    ECHO=\"$qECHO\"
   fi
 
 # Very basic option parsing. These options are (a) specific to
@@ -6861,9 +6611,9 @@ func_mode_link ()
     while test "$#" -gt 0; do
       arg=$1
       shift
-      func_quote_arg pretty,unquoted "$arg"
-      qarg=$func_quote_arg_unquoted_result
-      func_append libtool_args " $func_quote_arg_result"
+      func_quote_for_eval "$arg"
+      qarg=$func_quote_for_eval_unquoted_result
+      func_append libtool_args " $func_quote_for_eval_result"
 
       # If the previous option needs an argument, assign it.
       if test -n "$prev"; then
@@ -7099,13 +6849,6 @@ func_mode_link ()
          prev=
          continue
          ;;
-       xassembler)
-         func_append compiler_flags " -Xassembler $qarg"
-         prev=
-         func_append compile_command " -Xassembler $qarg"
-         func_append finalize_command " -Xassembler $qarg"
-         continue
-         ;;
        xcclinker)
          func_append linker_flags " $qarg"
          func_append compiler_flags " $qarg"
@@ -7276,7 +7019,7 @@ func_mode_link ()
            # These systems don't actually have a C library (as such)
            test X-lc = "X$arg" && continue
            ;;
-         *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig* | *-*-midnightbsd*)
+         *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*)
            # Do not include libc due to us having libc/libc_r.
            test X-lc = "X$arg" && continue
            ;;
@@ -7296,7 +7039,7 @@ func_mode_link ()
          esac
        elif test X-lc_r = "X$arg"; then
         case $host in
-        *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig* | *-*-midnightbsd*)
+        *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*)
           # Do not include libc_r directly, use -pthread flag.
           continue
           ;;
@@ -7326,20 +7069,8 @@ func_mode_link ()
        prev=xcompiler
        continue
        ;;
-     # Solaris ld rejects as of 11.4. Refer to Oracle bug 22985199.
-     -pthread)
-       case $host in
-         *solaris2*) ;;
-         *)
-           case "$new_inherited_linker_flags " in
-               *" $arg "*) ;;
-               * ) func_append new_inherited_linker_flags " $arg" ;;
-           esac
-         ;;
-       esac
-       continue
-       ;;
-      -mt|-mthreads|-kthread|-Kthread|-pthreads|--thread-safe \
+
+      -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
       |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
        func_append compiler_flags " $arg"
        func_append compile_command " $arg"
@@ -7480,9 +7211,9 @@ func_mode_link ()
        save_ifs=$IFS; IFS=,
        for flag in $args; do
          IFS=$save_ifs
-          func_quote_arg pretty "$flag"
-         func_append arg " $func_quote_arg_result"
-         func_append compiler_flags " $func_quote_arg_result"
+          func_quote_for_eval "$flag"
+         func_append arg " $func_quote_for_eval_result"
+         func_append compiler_flags " $func_quote_for_eval_result"
        done
        IFS=$save_ifs
        func_stripname ' ' '' "$arg"
@@ -7496,21 +7227,16 @@ func_mode_link ()
        save_ifs=$IFS; IFS=,
        for flag in $args; do
          IFS=$save_ifs
-          func_quote_arg pretty "$flag"
-         func_append arg " $wl$func_quote_arg_result"
-         func_append compiler_flags " $wl$func_quote_arg_result"
-         func_append linker_flags " $func_quote_arg_result"
+          func_quote_for_eval "$flag"
+         func_append arg " $wl$func_quote_for_eval_result"
+         func_append compiler_flags " $wl$func_quote_for_eval_result"
+         func_append linker_flags " $func_quote_for_eval_result"
        done
        IFS=$save_ifs
        func_stripname ' ' '' "$arg"
        arg=$func_stripname_result
        ;;
 
-      -Xassembler)
-        prev=xassembler
-        continue
-        ;;
-
       -Xcompiler)
        prev=xcompiler
        continue
@@ -7528,8 +7254,8 @@ func_mode_link ()
 
       # -msg_* for osf cc
       -msg_*)
-       func_quote_arg pretty "$arg"
-       arg=$func_quote_arg_result
+       func_quote_for_eval "$arg"
+       arg=$func_quote_for_eval_result
        ;;
 
       # Flags to be passed through unchanged, with rationale:
@@ -7548,15 +7274,12 @@ func_mode_link ()
       # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization
       # -specs=*             GCC specs files
       # -stdlib=*            select c++ std lib with clang
-      # -fsanitize=*         Clang/GCC memory and address sanitizer
-      # -fuse-ld=*           Linker select flags for GCC
-      # -Wa,*                Pass flags directly to the assembler
       -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
       -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
       -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \
-      -specs=*|-fsanitize=*|-fuse-ld=*|-Wa,*)
-        func_quote_arg pretty "$arg"
-       arg=$func_quote_arg_result
+      -specs=*)
+        func_quote_for_eval "$arg"
+       arg=$func_quote_for_eval_result
         func_append compile_command " $arg"
         func_append finalize_command " $arg"
         func_append compiler_flags " $arg"
@@ -7577,15 +7300,15 @@ func_mode_link ()
          continue
         else
          # Otherwise treat like 'Some other compiler flag' below
-         func_quote_arg pretty "$arg"
-         arg=$func_quote_arg_result
+         func_quote_for_eval "$arg"
+         arg=$func_quote_for_eval_result
         fi
        ;;
 
       # Some other compiler flag.
       -* | +*)
-        func_quote_arg pretty "$arg"
-       arg=$func_quote_arg_result
+        func_quote_for_eval "$arg"
+       arg=$func_quote_for_eval_result
        ;;
 
       *.$objext)
@@ -7705,8 +7428,8 @@ func_mode_link ()
       *)
        # Unknown arguments in both finalize_command and compile_command need
        # to be aesthetically quoted because they are evaled later.
-       func_quote_arg pretty "$arg"
-       arg=$func_quote_arg_result
+       func_quote_for_eval "$arg"
+       arg=$func_quote_for_eval_result
        ;;
       esac # arg
 
@@ -8911,7 +8634,7 @@ func_mode_link ()
       test CXX = "$tagname" && {
         case $host_os in
         linux*)
-          case `$CC -V 2>&1 | $SED 5q` in
+          case `$CC -V 2>&1 | sed 5q` in
           *Sun\ C*) # Sun C++ 5.9
             func_suncc_cstd_abi
 
@@ -9084,7 +8807,7 @@ func_mode_link ()
          #
          case $version_type in
          # correct linux to gnu/linux during the next big refactor
-         darwin|freebsd-elf|linux|midnightbsd-elf|osf|windows|none)
+         darwin|freebsd-elf|linux|osf|windows|none)
            func_arith $number_major + $number_minor
            current=$func_arith_result
            age=$number_minor
@@ -9175,7 +8898,7 @@ func_mode_link ()
          versuffix=.$current.$revision
          ;;
 
-       freebsd-elf | midnightbsd-elf)
+       freebsd-elf)
          func_arith $current - $age
          major=.$func_arith_result
          versuffix=$major.$age.$revision
@@ -9401,7 +9124,7 @@ func_mode_link ()
          *-*-netbsd*)
            # Don't link with libc until the a.out ld.so is fixed.
            ;;
-         *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-midnightbsd*)
+         *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
            # Do not include libc due to us having libc/libc_r.
            ;;
          *-*-sco3.2v5* | *-*-sco5v6*)
@@ -10212,8 +9935,8 @@ EOF
            for cmd in $concat_cmds; do
              IFS=$save_ifs
              $opt_quiet || {
-                 func_quote_arg expand,pretty "$cmd"
-                 eval "func_echo $func_quote_arg_result"
+                 func_quote_for_expand "$cmd"
+                 eval "func_echo $func_quote_for_expand_result"
              }
              $opt_dry_run || eval "$cmd" || {
                lt_exit=$?
@@ -10306,8 +10029,8 @@ EOF
          eval cmd=\"$cmd\"
          IFS=$save_ifs
          $opt_quiet || {
-           func_quote_arg expand,pretty "$cmd"
-           eval "func_echo $func_quote_arg_result"
+           func_quote_for_expand "$cmd"
+           eval "func_echo $func_quote_for_expand_result"
          }
          $opt_dry_run || eval "$cmd" || {
            lt_exit=$?
@@ -10781,13 +10504,12 @@ EOF
          elif eval var_value=\$$var; test -z "$var_value"; then
            relink_command="$var=; export $var; $relink_command"
          else
-           func_quote_arg pretty "$var_value"
-           relink_command="$var=$func_quote_arg_result; export $var; $relink_command"
+           func_quote_for_eval "$var_value"
+           relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
          fi
        done
-       func_quote eval cd "`pwd`"
-       func_quote_arg pretty,unquoted "($func_quote_result; $relink_command)"
-       relink_command=$func_quote_arg_unquoted_result
+       relink_command="(cd `pwd`; $relink_command)"
+       relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
       fi
 
       # Only actually do things if not in dry run mode.
@@ -11027,15 +10749,13 @@ EOF
        elif eval var_value=\$$var; test -z "$var_value"; then
          relink_command="$var=; export $var; $relink_command"
        else
-         func_quote_arg pretty,unquoted "$var_value"
-         relink_command="$var=$func_quote_arg_unquoted_result; export $var; $relink_command"
+         func_quote_for_eval "$var_value"
+         relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
        fi
       done
       # Quote the link command for shipping.
-      func_quote eval cd "`pwd`"
-      relink_command="($func_quote_result; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
-      func_quote_arg pretty,unquoted "$relink_command"
-      relink_command=$func_quote_arg_unquoted_result
+      relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
+      relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
       if test yes = "$hardcode_automatic"; then
        relink_command=
       fi
index 1fe1611f18514b7174f3529145b56cdc51d48c7c..8d0eaad250fc1ea8f3728338c1b016596cedfc60 100755 (executable)
@@ -3,7 +3,7 @@
 
 scriptversion=2018-03-07.03; # UTC
 
-# Copyright (C) 1996-2021 Free Software Foundation, Inc.
+# Copyright (C) 1996-2020 Free Software Foundation, Inc.
 # Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
 
 # This program is free software; you can redistribute it and/or modify
index be73b80adf95515f3fc7cdc504facb29bc12e6b3..89dba1e075cd371918d8ffa3bfd2051bbab0b370 100755 (executable)
@@ -3,7 +3,7 @@
 
 scriptversion=2018-03-07.03; # UTC
 
-# Copyright (C) 2011-2021 Free Software Foundation, Inc.
+# Copyright (C) 2011-2020 Free Software Foundation, Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -42,13 +42,11 @@ print_usage ()
 {
   cat <<END
 Usage:
-  test-driver --test-name NAME --log-file PATH --trs-file PATH
-              [--expect-failure {yes|no}] [--color-tests {yes|no}]
-              [--enable-hard-errors {yes|no}] [--]
+  test-driver --test-name=NAME --log-file=PATH --trs-file=PATH
+              [--expect-failure={yes|no}] [--color-tests={yes|no}]
+              [--enable-hard-errors={yes|no}] [--]
               TEST-SCRIPT [TEST-SCRIPT-ARGUMENTS]
-
 The '--test-name', '--log-file' and '--trs-file' options are mandatory.
-See the GNU Automake documentation for information.
 END
 }
 
@@ -105,11 +103,8 @@ trap "st=130; $do_exit" 2
 trap "st=141; $do_exit" 13
 trap "st=143; $do_exit" 15
 
-# Test script is run here. We create the file first, then append to it,
-# to ameliorate tests themselves also writing to the log file. Our tests
-# don't, but others can (automake bug#35762).
-: >"$log_file"
-"$@" >>"$log_file" 2>&1
+# Test script is run here.
+"$@" >$log_file 2>&1
 estatus=$?
 
 if test $enable_hard_errors = no && test $estatus -eq 99; then
@@ -131,7 +126,7 @@ esac
 # know whether the test passed or failed simply by looking at the '.log'
 # file, without the need of also peaking into the corresponding '.trs'
 # file (automake bug#11814).
-echo "$res $test_name (exit status: $estatus)" >>"$log_file"
+echo "$res $test_name (exit status: $estatus)" >>$log_file
 
 # Report outcome to console.
 echo "${col}${res}${std}: $test_name"
index e8ec109fa26c0306dc1e234b84998b5ab4b460ca..d1533360b6ed7c751ed07df753dee627e260f139 100755 (executable)
@@ -3,7 +3,7 @@
 
 scriptversion=2018-03-07.03; # UTC
 
-# Copyright (C) 1996-2021 Free Software Foundation, Inc.
+# Copyright (C) 1996-2020 Free Software Foundation, Inc.
 #
 # Written by Tom Tromey <tromey@cygnus.com>.
 #
index 78274426aec53e260085e90144f9743fc813ae25..42606aaf35d808fa485be0f9878f121bb878e30c 100644 (file)
@@ -1,5 +1,5 @@
 # libguestfs virt-builder tool
-# Copyright (C) 2013-2020 Red Hat Inc.
+# Copyright (C) 2013-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -152,7 +152,8 @@ virt_builder_CFLAGS = \
        $(LIBGUESTFS_CFLAGS) \
        $(LIBLZMA_CFLAGS) \
        $(LIBTINFO_CFLAGS) \
-       $(LIBXML2_CFLAGS)
+       $(LIBXML2_CFLAGS) \
+       $(LIBOSINFO_CFLAGS)
 
 BOBJECTS = $(SOURCES_ML:.ml=.cmo)
 XOBJECTS = $(BOBJECTS:.cmo=.cmx)
@@ -204,6 +205,7 @@ OCAMLCLIBS = \
        $(LIBGUESTFS_LIBS) \
        $(LIBLZMA_LIBS) \
        $(LIBXML2_LIBS) \
+       $(LIBOSINFO_LIBS) \
        $(JANSSON_LIBS) \
        $(LIBINTL) \
        -lgnu
@@ -233,6 +235,7 @@ OCAMLLINKFLAGS = \
 virt_builder_DEPENDENCIES = \
        $(OBJECTS) \
        ../common/mlpcre/mlpcre.$(MLARCHIVE) \
+       ../common/mlxml/mlxml.$(MLARCHIVE) \
        ../common/mlgettext/mlgettext.$(MLARCHIVE) \
        ../common/mlstdutils/mlstdutils.$(MLARCHIVE) \
        ../common/mlutils/mlcutils.$(MLARCHIVE) \
index 509c9d262c3a7540e2537b98be97aaf9c1b32b26..305a73b99a3a5f25ede52d79446ed9285b6082ad 100644 (file)
@@ -15,7 +15,7 @@
 @SET_MAKE@
 
 # libguestfs virt-builder tool
-# Copyright (C) 2013-2020 Red Hat Inc.
+# Copyright (C) 2013-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -32,7 +32,7 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -585,7 +585,6 @@ EGREP = @EGREP@
 ETAGS = @ETAGS@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FILECMD = @FILECMD@
 GCC_VISIBILITY_HIDDEN = @GCC_VISIBILITY_HIDDEN@
 GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
 GMSGFMT = @GMSGFMT@
@@ -614,6 +613,8 @@ LIBINTL = @LIBINTL@
 LIBLZMA_CFLAGS = @LIBLZMA_CFLAGS@
 LIBLZMA_LIBS = @LIBLZMA_LIBS@
 LIBOBJS = @LIBOBJS@
+LIBOSINFO_CFLAGS = @LIBOSINFO_CFLAGS@
+LIBOSINFO_LIBS = @LIBOSINFO_LIBS@
 LIBS = @LIBS@
 LIBTINFO_CFLAGS = @LIBTINFO_CFLAGS@
 LIBTINFO_LIBS = @LIBTINFO_LIBS@
@@ -684,6 +685,7 @@ PO4A_TRANSLATE = @PO4A_TRANSLATE@
 PODWRAPPER = @PODWRAPPER@
 POSUB = @POSUB@
 RANLIB = @RANLIB@
+REALPATH = @REALPATH@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
@@ -955,7 +957,8 @@ noinst_DATA = $(am__append_5) \
 @HAVE_OCAML_TRUE@      $(LIBGUESTFS_CFLAGS) \
 @HAVE_OCAML_TRUE@      $(LIBLZMA_CFLAGS) \
 @HAVE_OCAML_TRUE@      $(LIBTINFO_CFLAGS) \
-@HAVE_OCAML_TRUE@      $(LIBXML2_CFLAGS)
+@HAVE_OCAML_TRUE@      $(LIBXML2_CFLAGS) \
+@HAVE_OCAML_TRUE@      $(LIBOSINFO_CFLAGS)
 
 @HAVE_OCAML_TRUE@BOBJECTS = $(SOURCES_ML:.ml=.cmo)
 @HAVE_OCAML_TRUE@XOBJECTS = $(BOBJECTS:.cmo=.cmx)
@@ -999,6 +1002,7 @@ noinst_DATA = $(am__append_5) \
 @HAVE_OCAML_TRUE@      $(LIBGUESTFS_LIBS) \
 @HAVE_OCAML_TRUE@      $(LIBLZMA_LIBS) \
 @HAVE_OCAML_TRUE@      $(LIBXML2_LIBS) \
+@HAVE_OCAML_TRUE@      $(LIBOSINFO_LIBS) \
 @HAVE_OCAML_TRUE@      $(JANSSON_LIBS) \
 @HAVE_OCAML_TRUE@      $(LIBINTL) \
 @HAVE_OCAML_TRUE@      -lgnu
@@ -1023,6 +1027,7 @@ noinst_DATA = $(am__append_5) \
 @HAVE_OCAML_TRUE@virt_builder_DEPENDENCIES = \
 @HAVE_OCAML_TRUE@      $(OBJECTS) \
 @HAVE_OCAML_TRUE@      ../common/mlpcre/mlpcre.$(MLARCHIVE) \
+@HAVE_OCAML_TRUE@      ../common/mlxml/mlxml.$(MLARCHIVE) \
 @HAVE_OCAML_TRUE@      ../common/mlgettext/mlgettext.$(MLARCHIVE) \
 @HAVE_OCAML_TRUE@      ../common/mlstdutils/mlstdutils.$(MLARCHIVE) \
 @HAVE_OCAML_TRUE@      ../common/mlutils/mlcutils.$(MLARCHIVE) \
index 2c9c830855334c3b33a02c949c69967027111d4e..727aa8b2375d24e7243d7410b1266cc58de3bebd 100644 (file)
@@ -1,5 +1,5 @@
 (* virt-builder
- * Copyright (C) 2013-2020 Red Hat Inc.
+ * Copyright (C) 2013-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -97,7 +97,8 @@ let selected_cli_item cmdline index =
         name = arg && cmdline.arch = normalize_arch (Index.string_of_arch a)
     ) index
     with Not_found ->
-      error (f_"cannot find os-version ‘%s’ with architecture ‘%s’.\nUse --list to list available guest types.")
+      error (f_"cannot find os-version ‘%s’ with architecture ‘%s’.\n\
+                Use --list to list available guest types.")
         arg cmdline.arch in
   item
 
@@ -152,7 +153,13 @@ let main () =
   if cmdline.check_signature then (
     let cmd = sprintf "%s --help >/dev/null 2>&1" cmdline.gpg in
     if cmdline.gpg = "" || shell_command cmd <> 0 then
-      error (f_"no GNU Privacy Guard (GnuPG, gpg) binary was found.\n\nEither gpg v1 or v2 can be installed to check signatures.  Virt-builder looks for a binary called either ‘gpg2’ or ‘gpg‘ on the $PATH.  You can also specify a binary using the ‘--gpg’ option.  If you don't want to check signatures, use ’--no-check-signature’ but note that this may make you vulnerable to Man-In-The-Middle attacks.")
+      error (f_"no GNU Privacy Guard (GnuPG, gpg) binary was found.\n\n\
+                Either gpg v1 or v2 can be installed to check signatures.  \
+                Virt-builder looks for a binary called either ‘gpg2’ or \
+                ‘gpg‘ on the $PATH.  You can also specify a binary using \
+                the ‘--gpg’ option.  If you don't want to check signatures, \
+                use ’--no-check-signature’ but note that this may make you \
+                vulnerable to Man-In-The-Middle attacks.")
   );
 
   (* Check that curl works. *)
@@ -182,7 +189,7 @@ let main () =
    * create.
    *)
   let tmpdir = Mkdtemp.temp_dir "virt-builder." in
-  On_exit.rmdir tmpdir;
+  On_exit.rm_rf tmpdir;
 
   (* Download the sources. *)
   let downloader = Downloader.create ~curl:cmdline.curl ~cache ~tmpdir in
@@ -291,7 +298,11 @@ let main () =
   (match cmdline.output with
    | Some device when is_partition device ->
       if cmdline.warn_if_partition then
-        warning (f_"output device (%s) is a partition.  If you are writing to a USB key or external drive then you probably need to write to the whole device, not to a partition.  If this warning is wrong then you can disable it with --no-warn-if-partition")
+        warning (f_"output device (%s) is a partition.  If you are writing \
+                    to a USB key or external drive then you probably need \
+                    to write to the whole device, not to a partition.  If \
+                    this warning is wrong then you can disable it with \
+                    --no-warn-if-partition")
                 device;
    | Some _ | None -> ()
   );
@@ -316,10 +327,17 @@ let main () =
       (match Checksums.verify_checksums csums template with
        | Checksums.Good_checksum -> ()
        | Checksums.Mismatched_checksum (csum, csum_actual) ->
-          error (f_"%s checksum of template did not match the expected checksum!\n  found checksum: %s\n  expected checksum: %s\nTry:\n - Use the ‘-v’ option and look for earlier error messages.\n - Delete the cache: virt-builder --delete-cache\n - Check no one has tampered with the website or your network!")
-                (Checksums.string_of_csum_t csum) csum_actual (Checksums.string_of_csum csum)
+          error (f_"%s checksum of template did not match the expected \
+                    checksum!\n  found checksum: %s\n  expected checksum: %s\n\
+                    Try:\n - Use the ‘-v’ option and look for earlier error \
+                    messages.\n - Delete the cache: \
+                    virt-builder --delete-cache\n - Check no one has tampered \
+                    with the website or your network!")
+                (Checksums.string_of_csum_t csum) csum_actual
+                (Checksums.string_of_csum csum)
        | Checksums.Missing_file ->
-          error (f_"%s: template not downloaded or deleted.  You may have run ‘virt-builder --delete-cache’ in parallel.")
+          error (f_"%s: template not downloaded or deleted.  You may have \
+                    run ‘virt-builder --delete-cache’ in parallel.")
                 template
       )
 
@@ -391,10 +409,14 @@ let main () =
       | None -> blockdev_size in
 
     if size < original_image_size then
-      error (f_"images cannot be shrunk, the output size is too small for this image.  Requested size = %s, minimum size = %s")
+      error (f_"images cannot be shrunk, the output size is too small \
+                for this image.  Requested size = %s, minimum size = %s")
         (human_size size) (human_size original_image_size)
-    else if output_is_block_dev && output_format = "raw" && size > blockdev_size then
-      error (f_"output size is too large for this block device.  Requested size = %s, output block device = %s, output block device size = %s")
+    else if output_is_block_dev &&
+              output_format = "raw" && size > blockdev_size then
+      error (f_"output size is too large for this block device.  Requested \
+                size = %s, output block device = %s, output \
+                block device size = %s")
         (human_size size) output_filename (human_size blockdev_size);
     size in
 
@@ -558,7 +580,10 @@ let main () =
     match plan ~max_depth:5 transitions itags ~must ~must_not with
     | Some plan -> plan
     | None ->
-       error (f_"no plan could be found for making a disk image with\nthe required size, format etc. This is a bug in libguestfs!\nPlease file a bug, giving the command line arguments you used.") in
+       error (f_"no plan could be found for making a disk image with\n\
+                 the required size, format etc. \
+                 This is a bug in libguestfs!\nPlease file a bug, giving \
+                 the command line arguments you used.") in
 
   (* Print out the plan. *)
   if verbose () then (
@@ -642,7 +667,8 @@ let main () =
       let { Index.expand; lvexpand } = entry in
       message (f_"Resizing (using virt-resize) to expand the disk to %s")
         (human_size osize);
-      let preallocation = if oformat = "qcow2" then Some "metadata" else None in
+      let preallocation =
+        if oformat = "qcow2" then Some "metadata" else None in
       let () =
         let g = open_guestfs () in
         g#disk_create ?preallocation ofile oformat osize in
@@ -666,7 +692,8 @@ let main () =
       let ofile = List.assoc `Filename otags in
       let osize = Int64.of_string (List.assoc `Size otags) in
       let osize = roundup64 osize 512L in
-      message (f_"Resizing container (but not filesystems) to expand the disk to %s")
+      message (f_"Resizing container (but not filesystems) to \
+                  expand the disk to %s")
         (human_size osize);
       let cmd = sprintf "qemu-img resize %s %Ld%s"
         (quote ofile) osize (if verbose () then "" else " >/dev/null") in
@@ -720,7 +747,9 @@ let main () =
       inspect_mount_root g root;
       root
     | _ ->
-      error (f_"no guest operating systems or multiboot OS found in this disk image\nThis is a failure of the source repository.  Use -v for more information.")
+      error (f_"no guest operating systems or multiboot OS \
+                found in this disk image\nThis is a failure \
+                of the source repository.  Use -v for more information.")
   in
 
   Customize_run.run g root cmdline.customize_ops;
index c39f5fd07ef2ea0dab186cf3ef7acb18488a2517..c3ad5c8d3c4e53fb7ecd10923482a71432718c3b 100644 (file)
@@ -1,5 +1,5 @@
 (* virt-builder
- * Copyright (C) 2013-2020 Red Hat Inc.
+ * Copyright (C) 2013-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index 12faf8bb90e76c041f162cc46fe9f12825572a0d..9c8f6d94a95073153f5f36dca7996b2d49c0cb64 100644 (file)
@@ -1,5 +1,5 @@
 (* virt-builder
- * Copyright (C) 2013-2020 Red Hat Inc.
+ * Copyright (C) 2013-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index 491059aa627f4ab1e057dbf7d0e5f89abc8c6c5e..6ed338ded587d44475f7bd1488dffa67c3f0c1c7 100644 (file)
@@ -1,5 +1,5 @@
 (* virt-builder
- * Copyright (C) 2013-2020 Red Hat Inc.
+ * Copyright (C) 2013-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -190,7 +190,8 @@ A short summary of the options is given below.  For detailed help please
 read the man page virt-builder(1).
 ")
       prog in
-  let opthandle = create_standard_options argspec ~anon_fun ~machine_readable:true usage_msg in
+  let opthandle = create_standard_options argspec
+                    ~anon_fun ~machine_readable:true usage_msg in
   Getopt.parse opthandle.getopt;
 
   (* Dereference options. *)
@@ -236,7 +237,8 @@ read the man page virt-builder(1).
       (match args with
       | [arg] -> arg
       | [] ->
-        error (f_"virt-builder os-version\nMissing ‘os-version’. Use ‘--list’ to list available template names.")
+        error (f_"virt-builder os-version\nMissing ‘os-version’. \
+                  Use ‘--list’ to list available template names.")
       | _ ->
         error (f_"too many parameters, expecting ‘os-version’")
       )
@@ -247,13 +249,15 @@ read the man page virt-builder(1).
       | [arg] -> arg
       | [] -> ""
       | _ ->
-        error (f_"too many parameters, at most one ‘os-version’ is allowed for --list")
+        error (f_"too many parameters, at most one ‘os-version’ \
+                  is allowed for --list")
       )
     | `Notes ->
       (match args with
       | [arg] -> arg
       | [] ->
-        error (f_"virt-builder --notes os-version\nMissing ‘os-version’. Use ‘--list’ to list available template names.")
+        error (f_"virt-builder --notes os-version\nMissing ‘os-version’. \
+                  Use ‘--list’ to list available template names.")
       | _ ->
         error (f_"--notes: too many parameters, expecting ‘os-version’");
       )
@@ -263,13 +267,15 @@ read the man page virt-builder(1).
       (match args with
       | [] -> ""
       | _ ->
-        error (f_"--cache-all-templates/--print-cache/--delete-cache does not need any extra arguments")
+        error (f_"--cache-all-templates/--print-cache/--delete-cache \
+                  does not need any extra arguments")
       )
     | `Get_kernel ->
       (match args with
       | [arg] -> arg
       | [] ->
-        error (f_"virt-builder --get-kernel image\nMissing ‘image’ (disk image file) argument")
+        error (f_"virt-builder --get-kernel image\nMissing ‘image’ \
+                  (disk image file) argument")
       | _ ->
         error (f_"--get-kernel: too many parameters")
       ) in
index 70990ed6ebca157e78e650a3bd6c24a416f20564..d7402c3dfebdc38c264000645d0801290ae963a7 100644 (file)
@@ -1,5 +1,5 @@
 (* virt-builder
- * Copyright (C) 2013-2020 Red Hat Inc.
+ * Copyright (C) 2013-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index 5a55a498e7baeb5bb1b854a7838f1b4172bf9e92..184c298257233f7584a6a3ffbd2a8545289065fb 100644 (file)
@@ -114,7 +114,8 @@ and download_to t ?(progress_bar = false) ~proxy uri filename =
 
     let lines = Curl.run curl_h in
     if List.length lines < 1 then
-      error (f_"unexpected output from curl command, enable debug and look at previous messages");
+      error (f_"unexpected output from curl command, \
+                enable debug and look at previous messages");
     let status_code = List.hd lines in
     let bad_status_code = function
       | "" -> true
index 3036555936b772504026e058d855b7647ad8baac..03680f051796ed5658547370deded63b77faf2c5 100644 (file)
@@ -1,5 +1,5 @@
 (* virt-builder
- * Copyright (C) 2013-2020 Red Hat Inc.
+ * Copyright (C) 2013-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index e0b4063a2f231ae2933bf22ecfd9c596af6fd5d5..1716b4de46116fe1106dd621c7ba3dbccff6179b 100644 (file)
@@ -1,5 +1,5 @@
 (* virt-builder
- * Copyright (C) 2013-2020 Red Hat Inc.
+ * Copyright (C) 2013-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index 59fa5097dde423f103c71954b79ff75475c7ea06..b4cb81e78a6573b24402883b47eeaa8cbc229f6e 100644 (file)
@@ -25,9 +25,12 @@ open Utils
 open Printf
 open Unix
 
-let get_index ~downloader ~sigchecker ?(template = false) { Sources.uri; proxy } =
+let get_index ~downloader ~sigchecker ?(template = false)
+      { Sources.uri; proxy } =
   let corrupt_file () =
-    error (f_"The index file downloaded from ‘%s’ is corrupt.\nYou need to ask the supplier of this file to fix it and upload a fixed version.") uri
+    error (f_"The index file downloaded from ‘%s’ is corrupt.\n\
+              You need to ask the supplier of this file to fix it \
+              and upload a fixed version.") uri
   in
 
   let rec get_index () =
@@ -57,7 +60,9 @@ let get_index ~downloader ~sigchecker ?(template = false) { Sources.uri; proxy }
       fun (n, arch) ->
         let id = n, arch in
         if Hashtbl.mem nseen id then (
-          eprintf (f_"%s: index is corrupt: os-version ‘%s’ with architecture ‘%s’ appears two or more times\n") prog n arch;
+          eprintf (f_"%s: index is corrupt: os-version ‘%s’ with \
+                      architecture ‘%s’ appears two or more times\n")
+            prog n arch;
           corrupt_file ()
         );
         Hashtbl.add nseen id true
@@ -73,9 +78,11 @@ let get_index ~downloader ~sigchecker ?(template = false) { Sources.uri; proxy }
             if Hashtbl.mem fseen hashkey then (
               (match subkey with
               | Some value ->
-                eprintf (f_"%s: index is corrupt: %s: field ‘%s[%s]’ appears two or more times\n") prog n field value
+                eprintf (f_"%s: index is corrupt: %s: field ‘%s[%s]’ appears \
+                            two or more times\n") prog n field value
               | None ->
-                eprintf (f_"%s: index is corrupt: %s: field ‘%s’ appears two or more times\n") prog n field);
+                eprintf (f_"%s: index is corrupt: %s: field ‘%s’ appears \
+                            two or more times\n") prog n field);
               corrupt_file ()
             );
             Hashtbl.add fseen hashkey true
@@ -88,9 +95,11 @@ let get_index ~downloader ~sigchecker ?(template = false) { Sources.uri; proxy }
         fun (n, fields) ->
           let fields = List.map (fun (k, sk, v) -> (k, sk), v) fields in
           let printable_name =
-            try Some (List.assoc ("name", None) fields) with Not_found -> None in
+            try Some (List.assoc ("name", None) fields)
+            with Not_found -> None in
           let osinfo =
-            try Some (List.assoc ("osinfo", None) fields) with Not_found -> None in
+            try Some (List.assoc ("osinfo", None) fields)
+            with Not_found -> None in
           let file_uri =
             try make_absolute_uri (List.assoc ("file", None) fields)
             with Not_found ->
@@ -106,7 +115,8 @@ let get_index ~downloader ~sigchecker ?(template = false) { Sources.uri; proxy }
                 let roots = g#inspect_os () in
                 let nroots = Array.length roots in
                 if nroots <> 1 then (
-                  eprintf (f_"%s: no ‘arch’ entry for %s and failed to guess it\n") prog n;
+                  eprintf (f_"%s: no ‘arch’ entry for %s and failed to \
+                              guess it\n") prog n;
                   corrupt_file ()
                 );
                 let inspected_arch = g#inspect_get_arch (Array.get roots 0) in
@@ -132,7 +142,8 @@ let get_index ~downloader ~sigchecker ?(template = false) { Sources.uri; proxy }
               eprintf (f_"%s: cannot parse ‘revision’ field for ‘%s’\n") prog n;
               corrupt_file () in
           let format =
-            try Some (List.assoc ("format", None) fields) with Not_found -> None in
+            try Some (List.assoc ("format", None) fields)
+            with Not_found -> None in
           let size =
             let get_image_size filepath =
               (* If a compressed image manages to reach this code, qemu-img just
@@ -142,7 +153,8 @@ let get_index ~downloader ~sigchecker ?(template = false) { Sources.uri; proxy }
                 let infos = Utils.get_image_infos filepath in
                 JSON_parser.object_get_number "virtual-size" infos
               | `XZ | `GZip | `Tar | ` Zip ->
-                eprintf (f_"%s: cannot determine the virtual size of %s due to compression")
+                eprintf (f_"%s: cannot determine the virtual size of %s \
+                            due to compression")
                         prog filepath;
                 corrupt_file () in
 
@@ -163,7 +175,8 @@ let get_index ~downloader ~sigchecker ?(template = false) { Sources.uri; proxy }
                 corrupt_file ()
               ) in
           let compressed_size =
-            try Some (Int64.of_string (List.assoc ("compressed_size", None) fields))
+            try Some (Int64.of_string (List.assoc ("compressed_size", None)
+                                         fields))
             with
             | Not_found ->
               None
@@ -172,9 +185,11 @@ let get_index ~downloader ~sigchecker ?(template = false) { Sources.uri; proxy }
                 prog n;
               corrupt_file () in
           let expand =
-            try Some (List.assoc ("expand", None) fields) with Not_found -> None in
+            try Some (List.assoc ("expand", None) fields)
+            with Not_found -> None in
           let lvexpand =
-            try Some (List.assoc ("lvexpand", None) fields) with Not_found -> None in
+            try Some (List.assoc ("lvexpand", None) fields)
+            with Not_found -> None in
           let notes =
             let rec loop = function
               | [] -> []
@@ -247,7 +262,8 @@ let get_index ~downloader ~sigchecker ?(template = false) { Sources.uri; proxy }
       corrupt_file ()
     )
     else if path.[0] = '/' then (
-      eprintf (f_"%s: you must use relative paths (not ‘%s’) in the index file\n") prog path;
+      eprintf (f_"%s: you must use relative paths (not ‘%s’) \
+                  in the index file\n") prog path;
       corrupt_file ()
     )
     else (
index 39983faba5dce4bfd0b5e9bfeb3ecdc27e31f76b..daa88f4f00760c70ebe1617a9b3d9f287527dc99 100644 (file)
@@ -28,7 +28,7 @@ open Tools_utils
 
 let tmpdir =
   let tmpdir = Mkdtemp.temp_dir "guestfs-tests." in
-  On_exit.rmdir tmpdir;
+  On_exit.rm_rf tmpdir;
   tmpdir
 
 let dummy_sigchecker = Sigchecker.create ~gpg:"gpg"
@@ -58,7 +58,8 @@ let parse_file file =
                                        ~sigchecker:dummy_sigchecker
                                        source in
   List.map (
-    fun (id, e) -> (id, { e with Index.file_uri = Filename.basename e.Index.file_uri })
+    fun (id, e) -> (id, { e with Index.file_uri =
+                                   Filename.basename e.Index.file_uri })
   ) entries
 
 let format_entries entries =
@@ -88,7 +89,9 @@ let test_write_complete ctx =
            compressed_size = Some (Int64.of_int 12345);
            expand = Some "/dev/sda1";
            lvexpand = Some "/some/lv";
-           notes = [ ("", "Notes split\non several lines\n\n with starting space ") ];
+           notes = [ ("",
+                      "Notes split\non several lines\n\n with starting space ")
+                   ];
            hidden = false;
            aliases = Some ["alias1"; "alias2"];
            sigchecker = dummy_sigchecker;
index ba5b8949a52407d507d255b2ef1d1b11e4846821..88ce07b83681166625a1f1bde85b3c450d6d3b87 100644 (file)
@@ -1,5 +1,5 @@
 (* virt-builder
- * Copyright (C) 2013-2020 Red Hat Inc.
+ * Copyright (C) 2013-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -30,7 +30,8 @@ and c_section = string * c_fields             (* [name] + fields *)
 and c_fields = field array
 
 (* Calls yyparse in the C code. *)
-external parse_index : prog:string -> error_suffix:string -> string -> c_sections = "virt_builder_parse_index"
+external parse_index : prog:string -> error_suffix:string -> string ->
+                       c_sections = "virt_builder_parse_index"
 
 let read_ini ?(error_suffix = "") file =
   let sections = parse_index ~prog ~error_suffix file in
index 8a014d09b6529db1498b3409c1e4d8066655753b..f5069a2f4857d04382945bd8fa08bb36be12d0d4 100644 (file)
@@ -1,5 +1,5 @@
 (* virt-builder
- * Copyright (C) 2013-2020 Red Hat Inc.
+ * Copyright (C) 2013-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index ab3ac92dda53ddb8a0d8d3fec0d92a94e7485a90..baf032bf6a64c0830f0593ca71b9d93823e5d98e 100644 (file)
@@ -1,5 +1,5 @@
 (* virt-builder
- * Copyright (C) 2013-2020 Red Hat Inc.
+ * Copyright (C) 2013-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -20,7 +20,8 @@ open Std_utils
 open Tools_utils
 
 let re_locale =
-  PCRE.compile ~caseless:true "^([a-z]+)(_([a-z]+))?(\\.([a-z0-9-]+))?(@([a-z]+))?$"
+  PCRE.compile ~caseless:true
+    "^([a-z]+)(_([a-z]+))?(\\.([a-z0-9-]+))?(@([a-z]+))?$"
 
 let split_locale loc =
   let l = ref [] in
index f1f67290c8b35d2d49b626f75aeab4b5336d90ed..470d1b6edffbc1a680224b32a468f3b18a199efa 100644 (file)
@@ -121,7 +121,8 @@ and list_entries_json ~sources index =
         let item =
           match compressed_size with
           | None -> item
-          | Some n -> ("compressed-size", JSON.String (Int64.to_string n)) :: item in
+          | Some n -> ("compressed-size",
+                       JSON.String (Int64.to_string n)) :: item in
         let item =
           let json_notes =
             List.fold_right (
index f4897da9520f365d6d74941b02b27a0715a6a0ec..b0f076ef5b80c6869a8fd780649818df1cb22828 100644 (file)
@@ -1,5 +1,5 @@
 (* virt-builder
- * Copyright (C) 2014-2020 Red Hat Inc.
+ * Copyright (C) 2014-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index fcd579354630d9260143857132e991c848d43886..f73580b82499d3848d8d8062e5c6ecb5dfdf2fb4 100644 (file)
@@ -17,4 +17,5 @@
  *)
 
 external pxzcat : string -> string -> unit = "virt_builder_pxzcat"
-external using_parallel_xzcat : unit -> bool = "virt_builder_using_parallel_xzcat" [@@noalloc]
+external using_parallel_xzcat : unit -> bool =
+  "virt_builder_using_parallel_xzcat" [@@noalloc]
index c5b656310c06f1c301005b3a23ffb10b911c0e2d..3a5714afb16565e63e0a9be5b281ecde9ddebdbb 100644 (file)
@@ -1,5 +1,5 @@
 (* virt-builder
- * Copyright (C) 2016-2020 SUSE Inc.
+ * Copyright (C) 2016-2023 SUSE Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -68,7 +68,8 @@ A short summary of the options is given below.  For detailed help please
 read the man page virt-builder-repository(1).
 ")
       prog in
-  let opthandle = create_standard_options argspec ~anon_fun ~machine_readable:true usage_msg in
+  let opthandle = create_standard_options argspec
+                    ~anon_fun ~machine_readable:true usage_msg in
   Getopt.parse opthandle.getopt;
 
   (* Machine-readable mode?  Print out some facts about what
@@ -97,7 +98,8 @@ read the man page virt-builder-repository(1).
 
 Use ‘/path/to/repo’ to point to the repository folder.")
     | _ ->
-      error (f_"too many parameters, only one path to repository is allowed") in
+      error (f_"too many parameters, \
+                only one path to repository is allowed") in
 
   {
     gpg = gpg;
@@ -207,7 +209,7 @@ let process_image acc_entries filename repo tmprepo index interactive
       value
   in
 
-  let re_valid_id = PCRE.compile ~anchored:true "[-a-zA-Z0-9_.]+" in
+  let re_valid_id = PCRE.compile "^[-a-zA-Z0-9_.]+$" in
   let rec ask_id default =
     let id = ask (s_"Identifier: ") ~default in
     if not (PCRE.matches re_valid_id id) then (
@@ -217,7 +219,8 @@ let process_image acc_entries filename repo tmprepo index interactive
       id in
 
   let ask_arch guess =
-    let arches = [ "x86_64"; "aarch64"; "armv7l"; "i686"; "ppc64"; "ppc64le"; "s390x" ] in
+    let arches = [ "x86_64"; "aarch64"; "armv7l";
+                   "i686"; "ppc64"; "ppc64le"; "s390x" ] in
     Index.Arch (ask (s_"Architecture: ") ~default:guess ~values:arches)
   in
 
@@ -225,7 +228,8 @@ let process_image acc_entries filename repo tmprepo index interactive
     let osinfo = ask (s_ "osinfo short ID: ") ~default in
     let osinfo_ids = osinfo_get_short_ids () in
     if not (StringSet.mem osinfo osinfo_ids) then
-      warning (f_"‘%s’ is not a recognized osinfo OS id; using it anyway") osinfo;
+      warning (f_"‘%s’ is not a recognized osinfo OS id; using it anyway")
+        osinfo;
     osinfo in
 
   let extract_entry_data ?entry () =
@@ -237,7 +241,8 @@ let process_image acc_entries filename repo tmprepo index interactive
     let roots = g#inspect_os () in
     let nroots = Array.length roots in
     if nroots <> 1 then
-      error (f_"virt-builder template images must have one and only one root file system, found %d")
+      error (f_"virt-builder template images must have \
+                one and only one root file system, found %d")
             nroots;
 
     let root = Array.get roots 0 in
@@ -274,7 +279,8 @@ let process_image acc_entries filename repo tmprepo index interactive
         match arch with
         | Index.Arch arch
         | Index.GuessedArch arch -> arch in
-      error (f_"Already existing image with id %s and architecture %s") id arch
+      error (f_"Already existing image with id %s and architecture %s")
+        id arch
     );
 
     let printable_name =
@@ -420,7 +426,7 @@ let main () =
   (* Create a temporary folder to work in *)
   let tmpdir = Mkdtemp.temp_dir ~base_dir:cmdline.repo
                                 "virt-builder-repository." in
-  On_exit.rmdir tmpdir;
+  On_exit.rm_rf tmpdir;
 
   let tmprepo = tmpdir // "repo" in
   mkdir_p tmprepo 0o700;
@@ -451,7 +457,8 @@ let main () =
 
   (* Check for index/interactive consistency *)
   if not cmdline.interactive && index = [] then
-    error (f_"the repository must contain an index file when running in automated mode");
+    error (f_"the repository must contain an index file when \
+              running in automated mode");
 
   debug "Searching for images ...";
 
index fb964f473290c56a5b71e90cd56b8892b5a94694..e6f20f433faac0fe743b499d88ecfd8536a2f5c6 100644 (file)
@@ -1,5 +1,5 @@
 (* virt-builder
- * Copyright (C) 2016-2020 SUSE Inc.
+ * Copyright (C) 2016-2023 SUSE Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index 9b3289d304b785c4c3f98f43b2394931d98755e2..341d681489a307cf3f71cf0c264397e8ecfe65fd 100644 (file)
@@ -26,4 +26,5 @@ type localecategory =
   | LC_MESSAGES
 ;;
 
-external setlocale : localecategory -> string option -> string option = "virt_builder_setlocale"
+external setlocale : localecategory -> string option -> string option =
+  "virt_builder_setlocale"
index 72c9a26cc2df289273db8f0743383c3172fa794a..343f0bae9caac1efbfbe9ec21d3433f65106e032 100644 (file)
@@ -43,7 +43,8 @@ let import_keyfile ~gpg ~gpghome ~tmpdir ?(trust = true) keyfile =
     (if verbose () then "" else " >/dev/null 2>&1") in
   let r = shell_command cmd in
   if r <> 0 then
-    error (f_"could not import public key\nUse the ‘-v’ option and look for earlier error messages.");
+    error (f_"could not import public key\n\
+              Use the ‘-v’ option and look for earlier error messages.");
   let status = read_whole_file status_file in
   let status = String.nsplit "\n" status in
   let key_id = ref "" in
@@ -62,12 +63,14 @@ let import_keyfile ~gpg ~gpghome ~tmpdir ?(trust = true) keyfile =
       (if verbose () then "" else " >/dev/null 2>&1") in
     let r = shell_command cmd in
     if r <> 0 then
-      error (f_"GPG failure: could not trust the imported key\nUse the ‘-v’ option and look for earlier error messages.");
+      error (f_"GPG failure: could not trust the imported key\n\
+                Use the ‘-v’ option and look for earlier error messages.");
   );
   let subkeys =
     (* --with-fingerprint is specified twice so gpg outputs the full
      * fingerprint of the subkeys. *)
-    let cmd = sprintf "%s --homedir %s --with-colons --with-fingerprint --with-fingerprint --list-keys %s%s"
+    let cmd = sprintf "%s --homedir %s --with-colons \
+                       --with-fingerprint --with-fingerprint --list-keys %s%s"
       gpg gpghome !fingerprint
       (if verbose () then "" else " 2>/dev/null") in
     let lines = external_command cmd in
@@ -108,7 +111,8 @@ let rec create ~gpg ~gpgkey ~check_signature ~tmpdir =
         gpg gpgtmpdir (if verbose () then "" else " >/dev/null 2>&1") in
       let r = shell_command cmd in
       if r <> 0 then
-        error (f_"GPG failure: could not run GPG the first time\nUse the ‘-v’ option and look for earlier error messages.");
+        error (f_"GPG failure: could not run GPG the first time\n\
+                  Use the ‘-v’ option and look for earlier error messages.");
       match gpgkey with
       | No_Key ->
         assert false
@@ -121,7 +125,8 @@ let rec create ~gpg ~gpgkey ~check_signature ~tmpdir =
           (if verbose () then "" else " >/dev/null 2>&1") in
         let r = shell_command cmd in
         if r <> 0 then
-          error (f_"could not export public key\nUse the ‘-v’ option and look for earlier error messages.");
+          error (f_"could not export public key\n\
+                    Use the ‘-v’ option and look for earlier error messages.");
         import_keyfile gpg gpgtmpdir tmpdir filename
     ) else
       "", [] in
@@ -171,7 +176,12 @@ and verify_detached t filename sigfile =
   if t.check_signature then (
     match sigfile with
     | None ->
-      error (f_"there is no detached signature file\nThis probably means the index file is missing a sig=... line.\nYou can use --no-check-signature to ignore this error, but that means you are susceptible to man-in-the-middle attacks.")
+      error (f_"there is no detached signature file\n\
+                This probably means the index file is missing a \
+                sig=... line.\n\
+                You can use --no-check-signature to ignore this error, \
+                but that means you are susceptible to \
+                man-in-the-middle attacks.")
     | Some sigfile ->
       let args = sprintf "%s %s" (quote sigfile) (quote filename) in
       do_verify t args
@@ -185,7 +195,8 @@ and verify_and_remove_signature t filename =
     let cmd = [ "cp"; filename; asc_file ] in
     if run_command cmd <> 0 then exit 1;
     let out_file = Filename.temp_file ~temp_dir:t.tmpdir "vbfile" "" in
-    let args = sprintf "--yes --output %s %s" (quote out_file) (quote filename) in
+    let args =
+      sprintf "--yes --output %s %s" (quote out_file) (quote filename) in
     do_verify ~verify_only:false t args;
     Some out_file
   ) else
@@ -201,7 +212,11 @@ and do_verify ?(verify_only = true) t args =
         (quote status_file) args in
   let r = shell_command cmd in
   if r <> 0 then
-    error (f_"GPG failure: could not verify digital signature of file\nTry:\n - Use the ‘-v’ option and look for earlier error messages.\n - Delete the cache: virt-builder --delete-cache\n - Check no one has tampered with the website or your network!");
+    error (f_"GPG failure: could not verify digital signature of file\n\
+              Try:\n - Use the ‘-v’ option and look \
+              for earlier error messages.\n\
+              - Delete the cache: virt-builder --delete-cache\n\
+              - Check no one has tampered with the website or your network!");
 
   (* Check the fingerprint is who it should be. *)
   let status = read_whole_file status_file in
@@ -217,6 +232,10 @@ and do_verify ?(verify_only = true) t args =
   ) status;
 
   if not (equal_fingerprints !fingerprint t.fingerprint) &&
-    not (List.exists (equal_fingerprints !fingerprint) t.subkeys_fingerprints) then
-    error (f_"fingerprint of signature does not match the expected fingerprint!\n  found fingerprint: %s\n  expected fingerprint: %s")
+    not (List.exists (equal_fingerprints !fingerprint)
+           t.subkeys_fingerprints) then
+    error (f_"fingerprint of signature does not match the \
+              expected fingerprint!\n\
+              found fingerprint: %s\n\
+              expected fingerprint: %s")
       !fingerprint t.fingerprint
index 407eb11fbeebb56e9adec0200d073fbe5fed078c..70b44827c204457703aa109493573e318c397804 100644 (file)
@@ -75,7 +75,8 @@ let get_index ~downloader ~sigchecker { Sources.uri; proxy } =
 
     let format = object_get_string "format" tree in
     if format <> "products:1.0" then
-      error (f_"%s is not a Simple Streams (products) v1.0 JSON file (format: %s)")
+      error (f_"%s is not a Simple Streams (products) \
+                v1.0 JSON file (format: %s)")
         uri format;
 
     let products = object_get_object "products" tree in
index d6de159680bc7866c9d5796d67dbce3acefd72f8..ce6c67ec97e80f648a61137020d35396f7acbdb3 100644 (file)
@@ -45,7 +45,8 @@ let parse_conf file =
         let uri =
           try List.assoc ("uri", None) fields
           with Not_found as ex ->
-            eprintf (f_"%s: no ‘uri’ entry for ‘%s’ in %s, skipping it\n") prog n file;
+            eprintf (f_"%s: no ‘uri’ entry for ‘%s’ in %s, skipping it\n")
+              prog n file;
             raise ex in
         let gpgkey =
           let k =
@@ -121,7 +122,8 @@ let read_sources () =
       let files =
         try List.filter filter_filenames (Array.to_list (Sys.readdir dir))
         with Sys_error _ -> [] in
-      let files = List.filter (fun x -> StringSet.mem x !fnseen <> true) files in
+      let files =
+        List.filter (fun x -> StringSet.mem x !fnseen <> true) files in
       List.fold_left (
         fun acc file ->
           try (
index 69123f2518044e1d9737d2d5db68bfcaf39d6ade..64ceda4ed0ea70378ebcbeba32907fb6cb5c34c0 100644 (file)
@@ -1,5 +1,5 @@
 # libguestfs virt-builder tool
-# Copyright (C) 2013-2020 Red Hat Inc.
+# Copyright (C) 2013-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index ee397efbd7f8f311f1b6f5ce9aed3c32d3776ab7..d0cb030083352ade2dd48941a895e912e348df7e 100644 (file)
@@ -15,7 +15,7 @@
 @SET_MAKE@
 
 # libguestfs virt-builder tool
-# Copyright (C) 2013-2020 Red Hat Inc.
+# Copyright (C) 2013-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -32,7 +32,7 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -425,7 +425,6 @@ EGREP = @EGREP@
 ETAGS = @ETAGS@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FILECMD = @FILECMD@
 GCC_VISIBILITY_HIDDEN = @GCC_VISIBILITY_HIDDEN@
 GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
 GMSGFMT = @GMSGFMT@
@@ -454,6 +453,8 @@ LIBINTL = @LIBINTL@
 LIBLZMA_CFLAGS = @LIBLZMA_CFLAGS@
 LIBLZMA_LIBS = @LIBLZMA_LIBS@
 LIBOBJS = @LIBOBJS@
+LIBOSINFO_CFLAGS = @LIBOSINFO_CFLAGS@
+LIBOSINFO_LIBS = @LIBOSINFO_LIBS@
 LIBS = @LIBS@
 LIBTINFO_CFLAGS = @LIBTINFO_CFLAGS@
 LIBTINFO_LIBS = @LIBTINFO_LIBS@
@@ -524,6 +525,7 @@ PO4A_TRANSLATE = @PO4A_TRANSLATE@
 PODWRAPPER = @PODWRAPPER@
 POSUB = @POSUB@
 RANLIB = @RANLIB@
+REALPATH = @REALPATH@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
index c3386d356618c698c4c3c0b28d20aabe25bc5248..b58e55e5ca64d53434dfa6a3153ae878bff00388 100755 (executable)
@@ -1,6 +1,6 @@
 #!/usr/bin/env ocaml
 (* libguestfs
- * Copyright (C) 2016-2022 Red Hat Inc.
+ * Copyright (C) 2016-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -54,7 +54,8 @@ let () =
   (* Check that the ./run script was used. *)
   (try ignore (Sys.getenv "VIRT_BUILDER_DIRS")
    with Not_found ->
-     eprintf "%s: you must use `../../run ./make-template.ml ...' to run this script\n"
+     eprintf "%s: you must use `../../run ./make-template.ml ...' \
+              to run this script\n"
              prog;
      exit 1
   );
@@ -166,7 +167,8 @@ let rec main () =
   let chan = open_out (filename_of_os os arch ".virt-install-cmd") in
   fprintf chan "# This is the virt-install command which was used to create\n";
   fprintf chan "# the virt-builder template '%s'\n" (string_of_os os arch);
-  fprintf chan "# NB: This file is generated for documentation purposes ONLY!\n";
+  fprintf chan "# NB: This file is generated for documentation \
+                purposes ONLY!\n";
   fprintf chan "# This script was never run, and is not intended to be run.\n";
   fprintf chan "\n";
   print_virt_install_command chan vi;
@@ -254,10 +256,7 @@ let rec main () =
   if can_sysprep_os os then (
     (* Sysprep.  Relabel SELinux-using guests. *)
     printf "Sysprepping ...\n%!";
-    let cmd =
-      sprintf "virt-sysprep --quiet -a %s%s"
-              (quote tmpout)
-              (if is_selinux_os os then " --selinux-relabel" else "") in
+    let cmd = sprintf "virt-sysprep --quiet -a %s" (quote tmpout) in
     if Sys.command cmd <> 0 then exit 1
   );
 
@@ -481,11 +480,6 @@ and can_sysprep_os = function
   | Debian _ | Ubuntu _ -> true
   | FreeBSD _ | Windows _ -> false
 
-and is_selinux_os = function
-  | RHEL _ | Alma _ | CentOS _ | CentOSStream _ | Fedora _ -> true
-  | Debian _ | Ubuntu _
-  | FreeBSD _ | Windows _ -> false
-
 and needs_uefi os arch =
   match os, arch with
   | Fedora _, Armv7
@@ -640,7 +634,8 @@ poweroff
 # Rerun dracut for the installed kernel (not the running kernel).
 # See commit 0fa52e4e45d80874bc5ea5f112f74be1d3f3472f and
 # https://www.redhat.com/archives/libguestfs/2014-June/thread.html#00045
-KERNEL_VERSION=\"$(rpm -q kernel --qf '%%{version}-%%{release}.%%{arch}\\n' | sort -V | tail -1)\"
+KERNEL_VERSION=\"$(rpm -q kernel --qf '%%{version}-%%{release}.%%{arch}\\n' |
+                   sort -V | tail -1)\"
 dracut -f /boot/initramfs-$KERNEL_VERSION.img $KERNEL_VERSION
 "
   in
@@ -862,7 +857,8 @@ and make_boot_media os arch =
   match os, arch with
   | Alma (major, minor), X86_64 ->
      (* UK mirror *)
-     Location (sprintf "http://mirror.cov.ukservers.com/almalinux/%d.%d/BaseOS/x86_64/kickstart/"
+     Location (sprintf "http://mirror.cov.ukservers.com/almalinux/\
+                        %d.%d/BaseOS/x86_64/kickstart/"
                  major minor)
 
   | CentOS (major, _), Aarch64 ->
@@ -885,10 +881,12 @@ and make_boot_media os arch =
      Location "https://vault.centos.org/8.5.2111/BaseOS/x86_64/kickstart/"
 
   | CentOSStream 8, X86_64 ->
-     Location (sprintf "http://mirror.centos.org/centos/8-stream/BaseOS/x86_64/os")
+     Location (sprintf "http://mirror.centos.org/centos/8-stream/BaseOS/\
+                        x86_64/os")
 
   | CentOSStream ver, X86_64 ->
-     Location (sprintf "http://mirror.stream.centos.org/%d-stream/BaseOS/x86_64/os" ver)
+     Location (sprintf "http://mirror.stream.centos.org/%d-stream/BaseOS/\
+                        x86_64/os" ver)
 
   | Debian (_, dist), arch ->
      Location (sprintf "http://deb.debian.org/debian/dists/%s/main/installer-%s"
@@ -896,82 +894,107 @@ and make_boot_media os arch =
 
   (* Fedora primary architectures. *)
   | Fedora ver, Armv7 ->
-     Location (sprintf "https://lon.mirror.rackspace.com/fedora/releases/%d/Server/armhfp/os/" ver)
+     Location (sprintf "https://lon.mirror.rackspace.com/fedora/releases/\
+                        %d/Server/armhfp/os/" ver)
 
   | Fedora ver, X86_64 when ver < 21 ->
-     Location (sprintf "https://lon.mirror.rackspace.com/fedora/releases/releases/%d/Fedora/x86_64/os/" ver)
+     Location (sprintf "https://lon.mirror.rackspace.com/fedora/releases/\
+                        releases/%d/Fedora/x86_64/os/" ver)
 
   | Fedora ver, X86_64 ->
-     Location (sprintf "https://lon.mirror.rackspace.com/fedora/releases/%d/Server/x86_64/os/" ver)
+     Location (sprintf "https://lon.mirror.rackspace.com/fedora/releases/\
+                        %d/Server/x86_64/os/" ver)
 
   | Fedora ver, Aarch64 ->
-     Location (sprintf "https://lon.mirror.rackspace.com/fedora/releases/%d/Server/aarch64/os/" ver)
+     Location (sprintf "https://lon.mirror.rackspace.com/fedora/releases/\
+                        %d/Server/aarch64/os/" ver)
 
   (* Fedora secondary architectures.
    * By using dl.fedoraproject.org we avoid randomly using mirrors
    * which might have incomplete copies.
    *)
   | Fedora ver, I686 ->
-     Location (sprintf "https://dl.fedoraproject.org/pub/fedora-secondary/releases/%d/Server/i386/os/" ver)
+     Location (sprintf "https://dl.fedoraproject.org/pub/fedora-secondary/\
+                        releases/%d/Server/i386/os/" ver)
 
   | Fedora ver, PPC64 ->
-     Location (sprintf "https://dl.fedoraproject.org/pub/fedora-secondary/releases/%d/Server/ppc64/os/" ver)
+     Location (sprintf "https://dl.fedoraproject.org/pub/fedora-secondary/\
+                        releases/%d/Server/ppc64/os/" ver)
 
   | Fedora ver, PPC64le ->
-     Location (sprintf "https://dl.fedoraproject.org/pub/fedora-secondary/releases/%d/Server/ppc64le/os/" ver)
+     Location (sprintf "https://dl.fedoraproject.org/pub/fedora-secondary/\
+                        releases/%d/Server/ppc64le/os/" ver)
 
   | Fedora ver, S390X ->
-     Location (sprintf "https://dl.fedoraproject.org/pub/fedora-secondary/releases/%d/Server/s390x/os/" ver)
+     Location (sprintf "https://dl.fedoraproject.org/pub/fedora-secondary/\
+                        releases/%d/Server/s390x/os/" ver)
 
   | RHEL (3, minor), X86_64 ->
-     Location (sprintf "http://download.devel.redhat.com/released/RHEL-3/U%d/AS/x86_64/tree" minor)
+     Location (sprintf "http://download.devel.redhat.com/released/RHEL-3/\
+                        U%d/AS/x86_64/tree" minor)
 
   | RHEL (4, minor), X86_64 ->
-     Location (sprintf "http://download.devel.redhat.com/released/RHEL-4/U%d/AS/x86_64/tree" minor)
+     Location (sprintf "http://download.devel.redhat.com/released/RHEL-4/\
+                        U%d/AS/x86_64/tree" minor)
 
   | RHEL (5, minor), I686 ->
-     Location (sprintf "http://download.devel.redhat.com/released/RHEL-5-Server/U%d/i386/os" minor)
+     Location (sprintf "http://download.devel.redhat.com/released/\
+                        RHEL-5-Server/U%d/i386/os" minor)
 
   | RHEL (5, minor), X86_64 ->
-     Location (sprintf "http://download.devel.redhat.com/released/RHEL-5-Server/U%d/x86_64/os" minor)
+     Location (sprintf "http://download.devel.redhat.com/released/\
+                        RHEL-5-Server/U%d/x86_64/os" minor)
 
   | RHEL (6, minor), I686 ->
-     Location (sprintf "http://download.devel.redhat.com/released/RHEL-6/6.%d/Server/i386/os" minor)
+     Location (sprintf "http://download.devel.redhat.com/released/\
+                        RHEL-6/6.%d/Server/i386/os" minor)
 
   | RHEL (6, minor), X86_64 ->
-     Location (sprintf "http://download.devel.redhat.com/released/RHEL-6/6.%d/Server/x86_64/os" minor)
+     Location (sprintf "http://download.devel.redhat.com/released/\
+                        RHEL-6/6.%d/Server/x86_64/os" minor)
 
   | RHEL (7, minor), X86_64 ->
-     Location (sprintf "http://download.devel.redhat.com/released/rhel-6-7-8/rhel-7/RHEL-7/7.%d/Server/x86_64/os" minor)
+     Location (sprintf "http://download.devel.redhat.com/released/\
+                        rhel-6-7-8/rhel-7/RHEL-7/7.%d/Server/x86_64/os" minor)
 
   | RHEL (7, minor), PPC64 ->
-     Location (sprintf "http://download.devel.redhat.com/released/rhel-6-7-8/rhel-7/RHEL-7/7.%d/Server/ppc64/os" minor)
+     Location (sprintf "http://download.devel.redhat.com/released/\
+                        rhel-6-7-8/rhel-7/RHEL-7/7.%d/Server/ppc64/os" minor)
 
   | RHEL (7, minor), PPC64le ->
-     Location (sprintf "http://download.devel.redhat.com/released/rhel-6-7-8/rhel-7/RHEL-7/7.%d/Server/ppc64le/os" minor)
+     Location (sprintf "http://download.devel.redhat.com/released/\
+                        rhel-6-7-8/rhel-7/RHEL-7/7.%d/Server/ppc64le/os" minor)
 
   | RHEL (7, minor), S390X ->
-     Location (sprintf "http://download.devel.redhat.com/released/rhel-6-7-8/rhel-7/RHEL-7/7.%d/Server/s390x/os" minor)
+     Location (sprintf "http://download.devel.redhat.com/released/\
+                        rhel-6-7-8/rhel-7/RHEL-7/7.%d/Server/s390x/os" minor)
 
   | RHEL (7, minor), Aarch64 ->
-     Location (sprintf "http://download.eng.bos.redhat.com/released/RHEL-ALT-7/7.%d/Server/aarch64/os" minor)
+     Location (sprintf "http://download.eng.bos.redhat.com/released/\
+                        RHEL-ALT-7/7.%d/Server/aarch64/os" minor)
 
   | RHEL (8, minor), arch ->
-     Location (sprintf "http://download.eng.bos.redhat.com/released/rhel-6-7-8/rhel-8/RHEL-8/8.%d.0/BaseOS/%s/os" minor (string_of_arch arch))
+     Location (sprintf "http://download.eng.bos.redhat.com/released/\
+                        rhel-6-7-8/rhel-8/RHEL-8/8.%d.0/BaseOS/%s/os"
+                 minor (string_of_arch arch))
 
   | RHEL (9, minor), arch ->
-     Location (sprintf "http://download.eng.bos.redhat.com/released/RHEL-9/9.%d.0/BaseOS/%s/os" minor (string_of_arch arch))
+     Location (sprintf "http://download.eng.bos.redhat.com/released/\
+                        RHEL-9/9.%d.0/BaseOS/%s/os" minor (string_of_arch arch))
 
   | Ubuntu (_, dist), X86_64 ->
-     Location (sprintf "http://archive.ubuntu.com/ubuntu/dists/%s/main/installer-amd64" dist)
+     Location (sprintf "http://archive.ubuntu.com/ubuntu/dists/\
+                        %s/main/installer-amd64" dist)
 
   | Ubuntu (_, dist), PPC64le ->
-     Location (sprintf "http://ports.ubuntu.com/ubuntu-ports/dists/%s/main/installer-ppc64el" dist)
+     Location (sprintf "http://ports.ubuntu.com/ubuntu-ports/dists/\
+                        %s/main/installer-ppc64el" dist)
 
   | FreeBSD (major, minor), X86_64 ->
      let iso = sprintf "FreeBSD-%d.%d-RELEASE-amd64-disc1.iso"
                        major minor in
-     let iso_xz = sprintf "ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/ISO-IMAGES/%d.%d/%s.xz"
+     let iso_xz = sprintf "ftp://ftp.freebsd.org/pub/FreeBSD/releases/\
+                           amd64/amd64/ISO-IMAGES/%d.%d/%s.xz"
                        major minor iso in
      let cmd = sprintf "wget -nc %s" (quote iso_xz) in
      if Sys.command cmd <> 0 then exit 1;
@@ -993,13 +1016,15 @@ and make_boot_media os arch =
        | 10, 0, Server, X86_64 -> (* Windows Server 2016 *)
           "en_windows_server_2016_updated_feb_2018_x64_dvd_11636692.iso"
        | _ ->
-          eprintf "%s: don't have an installer ISO for this version of Windows\n"
+          eprintf "%s: don't have an installer ISO for this version of \
+                   Windows\n"
                   prog;
           exit 1 in
      CDRom (windows_installers // iso_name)
 
   | _ ->
-     eprintf "%s: don't know how to calculate the --location for this OS and architecture\n" prog;
+     eprintf "%s: don't know how to calculate the --location for this OS \
+              and architecture\n" prog;
      exit 1
 
 and print_install_notes = function
@@ -1111,7 +1136,9 @@ and make_virt_install_command os arch ks tmpname tmpout tmpefivars
             * https://bugs.almalinux.org/view.php?id=127
             * Once this is fixed, do the same as CentOS below.
             *)
-           sprintf "inst.ks=file:/%s inst.repo=http://repo.almalinux.org/almalinux/%d/BaseOS/x86_64/os/" (Filename.basename ks) major
+           sprintf "inst.ks=file:/%s inst.repo=http://repo.almalinux.org/\
+                    almalinux/%d/BaseOS/x86_64/os/"
+             (Filename.basename ks) major
         | RHEL (n, _) | CentOS (n, _) | CentOSStream n when n >= 9 ->
            sprintf "inst.ks=file:/%s" (Filename.basename ks)
         | Fedora _ | RHEL _ | CentOS _ | CentOSStream _ ->
@@ -1260,7 +1287,8 @@ and kernel_cmdline_of_os os arch =
   | _, S390X ->
      "console=tty0 console=ttyS0,115200 rd_NO_PLYMOUTH"
   | _, Aarch64 ->
-     "console=ttyAMA0 earlyprintk=pl011,0x9000000 ignore_loglevel no_timer_check printk.time=1 rd_NO_PLYMOUTH"
+     "console=ttyAMA0 earlyprintk=pl011,0x9000000 ignore_loglevel \
+      no_timer_check printk.time=1 rd_NO_PLYMOUTH"
   | _, Armv7 ->
      "console=tty0 console=ttyAMA0,115200 rd_NO_PLYMOUTH"
   | (Debian _|Fedora _|Ubuntu _), (PPC64|PPC64le) ->
@@ -1499,14 +1527,16 @@ and notes_of_os os arch nvram =
    | CentOS _ ->
       add "This CentOS image contains only unmodified @Core group packages."
    | CentOSStream _ ->
-      add "This CentOS Stream image contains only unmodified @Core group packages."
+      add "This CentOS Stream image contains only unmodified @Core \
+           group packages."
    | Debian _ ->
       add "This is a minimal Debian install."
    | Fedora _ ->
       add "This Fedora image contains only unmodified @Core group packages.";
       add "";
       add "Fedora and the Infinity design logo are trademarks of Red Hat, Inc.";
-      add "Source and further information is available from http://fedoraproject.org/"
+      add "Source and further information is available from \
+           http://fedoraproject.org/"
    | RHEL _ -> assert false (* cannot happen, see caller *)
    | Ubuntu _ ->
       add "This is a minimal Ubuntu install."
@@ -1617,7 +1647,8 @@ and open_guest ?(mount = false) filename =
 
   let roots = g#inspect_os () in
   if Array.length roots = 0 then (
-    eprintf "%s: cannot inspect this guest - this may mean guest installation failed\n" prog;
+    eprintf "%s: cannot inspect this guest - \
+             this may mean guest installation failed\n" prog;
     exit 1
   );
 
index e1e58b7c8ebe677ec9a3ceb52342c48788f0a2b8..eebc31e0993ff7a86cb613f05f2cfb9dc890f9f5 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/bash -
 # libguestfs virt-builder validate index
-# Copyright (C) 2013-2020 Red Hat Inc.
+# Copyright (C) 2013-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index 37a16cd5874975a6f677c04c1c237fca24488388..0e87d63a2d94fbd275587aa45332a501b25b8b5a 100644 (file)
@@ -1,5 +1,5 @@
 (* virt-builder
- * Copyright (C) 2013-2020 Red Hat Inc.
+ * Copyright (C) 2013-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index 4f799e74a4c3682de2100a836bc1b480542e2bc9..7bbcb6eee7bfa81e27072722090801d80506734b 100644 (file)
@@ -1,5 +1,5 @@
 (* virt-builder
- * Copyright (C) 2013-2020 Red Hat Inc.
+ * Copyright (C) 2013-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index 1fdd26353279e3a9ab98182dcfaa0e2197f27e4c..3af49e9a3e74fc91da6fb1a6334a28e44a13ffbc 100644 (file)
@@ -215,4 +215,4 @@ Cédric Bosdonnat L<mailto:cbosdonnat@suse.com>
 
 =head1 COPYRIGHT
 
-Copyright (C) 2016-2020 SUSE Inc.
+Copyright (C) 2016-2023 SUSE Inc.
index f7dd6cdad53356c9754e62e229efa329c7298965..aeb505296887ab5d34eea0c09b7af61c0e42fb99 100644 (file)
@@ -131,12 +131,6 @@ To update the installed packages to the latest version:
 
  virt-builder debian-7 --update
 
-For guests which use SELinux, like Fedora and Red Hat Enterprise
-Linux, you may need to do SELinux relabelling after installing or
-updating packages (see L</SELINUX> below):
-
- virt-builder fedora-27 --update --selinux-relabel
-
 =head2 Customizing the installation
 
 There are many options that let you customize the installation.  These
@@ -972,7 +966,7 @@ command line.
 
 =item *
 
-SELinux relabelling is done (I<--selinux-relabel>).
+SELinux relabelling is done unless disabled with I<--no-selinux-relabel>.
 
 =back
 
@@ -1072,8 +1066,7 @@ A typical virt-builder command would be:
    --install puppet \
    --append-line '/etc/puppet/puppet.conf:[agent]' \
    --append-line '/etc/puppet/puppet.conf:server = puppetmaster.example.com/' \
-   --run-command 'systemctl enable puppet' \
-   --selinux-relabel
+   --run-command 'systemctl enable puppet'
 
 The precise instructions vary according to the Linux distro.  For
 further information see:
@@ -1753,14 +1746,14 @@ two possible strategies it can use to ensure correct labelling:
 
 =over 4
 
-=item Using I<--selinux-relabel>
+=item Automatic relabeling
 
 This runs L<setfiles(8)> just before finalizing the guest, which sets
 SELinux labels correctly in the disk image.
 
 This is the recommended method.
 
-=item I<--touch> F</.autorelabel>
+=item Using I<--no-selinux-relabel> I<--touch> F</.autorelabel>
 
 Guest templates may already contain a file called F</.autorelabel> or
 you may touch it.
@@ -1771,11 +1764,6 @@ them, which is normal and harmless.
 
 =back
 
-Please note that if your guest uses SELinux, and you are doing operations
-on it which might create new files or change existing ones, you are
-recommended to use I<--selinux-relabel>.  This will help in making sure
-that files have the right SELinux labels.
-
 =head1 MACHINE READABLE OUTPUT
 
 The I<--machine-readable> option can be used to make the output more
index f1de5c8669873744f00b33a1ddce4f737b8296b0..0be3723f02f3771346a44d1e3295d8253dcbaca9 100644 (file)
@@ -1,5 +1,5 @@
 # libguestfs virt-cat, virt-filesystems, virt-log, virt-ls and virt-tail.
-# Copyright (C) 2010-2020 Red Hat Inc.
+# Copyright (C) 2010-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index ebbf968c2044ca95e0bb0966da554db48fe26145..d44063b10263bf63d5608c47e6912d3440b0d062 100644 (file)
@@ -15,7 +15,7 @@
 @SET_MAKE@
 
 # libguestfs virt-cat, virt-filesystems, virt-log, virt-ls and virt-tail.
-# Copyright (C) 2010-2020 Red Hat Inc.
+# Copyright (C) 2010-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -32,7 +32,7 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -539,7 +539,6 @@ EGREP = @EGREP@
 ETAGS = @ETAGS@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FILECMD = @FILECMD@
 GCC_VISIBILITY_HIDDEN = @GCC_VISIBILITY_HIDDEN@
 GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
 GMSGFMT = @GMSGFMT@
@@ -568,6 +567,8 @@ LIBINTL = @LIBINTL@
 LIBLZMA_CFLAGS = @LIBLZMA_CFLAGS@
 LIBLZMA_LIBS = @LIBLZMA_LIBS@
 LIBOBJS = @LIBOBJS@
+LIBOSINFO_CFLAGS = @LIBOSINFO_CFLAGS@
+LIBOSINFO_LIBS = @LIBOSINFO_LIBS@
 LIBS = @LIBS@
 LIBTINFO_CFLAGS = @LIBTINFO_CFLAGS@
 LIBTINFO_LIBS = @LIBTINFO_LIBS@
@@ -638,6 +639,7 @@ PO4A_TRANSLATE = @PO4A_TRANSLATE@
 PODWRAPPER = @PODWRAPPER@
 POSUB = @POSUB@
 RANLIB = @RANLIB@
+REALPATH = @REALPATH@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
index 5b51b7df844754d67ae54bbd51c1e57b5b6ae9ec..6baa350421da73f7e45848b6d2c87cc8a029fee5 100644 (file)
--- a/cat/cat.c
+++ b/cat/cat.c
@@ -1,5 +1,5 @@
 /* virt-cat
- * Copyright (C) 2010-2012 Red Hat Inc.
+ * Copyright (C) 2010-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -250,6 +250,9 @@ main (int argc, char *argv[])
   /* Add drives, inspect and mount. */
   add_drives (drvs);
 
+  if (key_store_requires_network (ks) && guestfs_set_network (g, 1) == -1)
+    exit (EXIT_FAILURE);
+
   if (guestfs_launch (g) == -1)
     exit (EXIT_FAILURE);
 
index 8ddb0a618b729f86aa5a652cb95801292e911816..12c19774e9b519bd3790bb8c35f87a8fa515341e 100644 (file)
@@ -1,5 +1,5 @@
 /* virt-filesystems
- * Copyright (C) 2010-2012 Red Hat Inc.
+ * Copyright (C) 2010-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index df7e2be926843f110b123438d139917b2ddb377a..2cd5a65bb244e17f4ba2e9b8e3aac6c02c9a7881 100644 (file)
--- a/cat/log.c
+++ b/cat/log.c
@@ -1,5 +1,5 @@
 /* virt-log
- * Copyright (C) 2010-2020 Red Hat Inc.
+ * Copyright (C) 2010-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -70,7 +70,7 @@ usage (int status)
              getprogname ());
   else {
     printf (_("%s: display log files in a virtual machine\n"
-              "Copyright (C) 2010-2020 Red Hat Inc.\n"
+              "Copyright (C) 2010-2023 Red Hat Inc.\n"
               "Usage:\n"
               "  %s [--options] -d domname\n"
               "  %s [--options] -a disk.img [-a disk.img ...]\n"
@@ -224,6 +224,9 @@ main (int argc, char *argv[])
    */
   add_drives (drvs);
 
+  if (key_store_requires_network (ks) && guestfs_set_network (g, 1) == -1)
+    exit (EXIT_FAILURE);
+
   if (guestfs_launch (g) == -1)
     exit (EXIT_FAILURE);
 
index e062823b87e8b3e483191b775f47ba0e35b0c454..d09fec54182ce6c61355f4b9cef02ff23ca356ec 100644 (file)
--- a/cat/ls.c
+++ b/cat/ls.c
@@ -1,5 +1,5 @@
 /* virt-ls
- * Copyright (C) 2010-2012 Red Hat Inc.
+ * Copyright (C) 2010-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -98,7 +98,7 @@ usage (int status)
              getprogname ());
   else {
     printf (_("%s: list files in a virtual machine\n"
-              "Copyright (C) 2010-2012 Red Hat Inc.\n"
+              "Copyright (C) 2010-2023 Red Hat Inc.\n"
               "Usage:\n"
               "  %s [--options] -d domname dir [dir ...]\n"
               "  %s [--options] -a disk.img [-a disk.img ...] dir [dir ...]\n"
@@ -374,6 +374,9 @@ main (int argc, char *argv[])
   /* Add drives, inspect and mount. */
   add_drives (drvs);
 
+  if (key_store_requires_network (ks) && guestfs_set_network (g, 1) == -1)
+    exit (EXIT_FAILURE);
+
   if (guestfs_launch (g) == -1)
     exit (EXIT_FAILURE);
 
index 1cf1d6e0ea6eb552174d44ce20547eb82d1d9403..2a06e0ebdb35f284570c2e1acd9a90817c60da94 100644 (file)
@@ -296,6 +296,9 @@ do_tail (int argc, char *argv[], /* list of files in the guest */
     /* Add drives, inspect and mount. */
     add_drives (drvs);
 
+    if (key_store_requires_network (ks) && guestfs_set_network (g, 1) == -1)
+      exit (EXIT_FAILURE);
+
     if (guestfs_launch (g) == -1)
       return -1;
 
index 89ffc94adefff902f3a3dd95922e763869a20c00..2c845744dda4fbe63de2a5fea5247c7a62de745a 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/bash -
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index 5fccadad9315d5a225a98393d47a532b8fa2896e..852cbf98b3cc11ee3385cfd6bce284f77100fde9 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/bash -
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index 957c8fafe92108f93bb4ac323c0a46f9fdab593c..0db94a030974611ac32d81021cc8b8b90f6cbde4 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/bash -
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index 02e1f0285763a780eb9e6afc2a65f3f4343d25af..e98faa42b628b2ec8af8daa544d791a431d96bff 100755 (executable)
@@ -23,6 +23,7 @@ skip_if_skipped
 
 # Read out the test directory using virt-ls.
 if [ "$($VG virt-ls --format=raw -a ../test-data/phony-guests/fedora.img /bin)" != "ls
+rpm
 test1
 test2
 test3
@@ -39,7 +40,9 @@ output="$($VG virt-ls -lR --format=raw -a ../test-data/phony-guests/fedora.img /
 expected="d0755/boot
 d0755/boot/grub
 -0644/boot/grub/grub.conf
-d0700/boot/lost+found"
+-0644/boot/initramfs-5.19.0-0.rc1.14.fc37.x86_64.img
+d0700/boot/lost+found
+-0644/boot/vmlinuz-5.19.0-0.rc1.14.fc37.x86_64"
 if [ "$output" != "$expected" ]; then
     echo "$0: error: unexpected output from virt-ls -lR"
     echo "output: ------------------------------------------"
index aabe08517403526d271f4249cea2d44cddbb9549..663eae0ce725eec9af648b2c783496997a376a5e 100644 (file)
@@ -290,4 +290,4 @@ Richard W.M. Jones L<http://people.redhat.com/~rjones/>
 
 =head1 COPYRIGHT
 
-Copyright (C) 2010-2012 Red Hat Inc.
+Copyright (C) 2010-2023 Red Hat Inc.
index 5e9ae6658edfed4a4d4cb36e1c2aff603160cfdf..2b47f1294ed159303ab6844ea3a23ea228e15a19 100644 (file)
@@ -388,6 +388,7 @@ L<guestfs(3)>,
 L<guestfish(1)>,
 L<virt-cat(1)>,
 L<virt-df(1)>,
+L<virt-drivers(1)>,
 L<virt-list-filesystems(1)>,
 L<virt-list-partitions(1)>,
 L<csvtool(1)>,
@@ -399,4 +400,4 @@ Richard W.M. Jones L<http://people.redhat.com/~rjones/>
 
 =head1 COPYRIGHT
 
-Copyright (C) 2010-2012 Red Hat Inc.
+Copyright (C) 2010-2023 Red Hat Inc.
index 4eb4c2d3cd61edaa3763d73d08f37a88c7d95923..900d14e53f5a03ef0ce94b2066e889efabbbc29d 100644 (file)
@@ -151,4 +151,4 @@ Richard W.M. Jones L<http://people.redhat.com/~rjones/>
 
 =head1 COPYRIGHT
 
-Copyright (C) 2010-2020 Red Hat Inc.
+Copyright (C) 2010-2023 Red Hat Inc.
index ba3894cd6b39c0f0e25c86b26ae06f9d58a4f282..a638e4e0de89a592d483ceaa30aec45fb843e968 100644 (file)
@@ -532,4 +532,4 @@ Richard W.M. Jones L<http://people.redhat.com/~rjones/>
 
 =head1 COPYRIGHT
 
-Copyright (C) 2009-2020 Red Hat Inc.
+Copyright (C) 2009-2023 Red Hat Inc.
index 10ab26804b6f242146e88242d34469b078130891..49915e31b462d6296f5cbada9ca8bfe4bf419136 100644 (file)
@@ -35,6 +35,7 @@ Makefile.in
 /errnostring/errnostring.h
 /mlcustomize/.depend
 /mlcustomize/test-firstboot-*.sh
+/mldrivers/.depend
 /mlgettext/.depend
 /mlgettext/common_gettext.ml
 /mlpcre/.depend
index 09aa8273295c57f9768836d2417694982c65d694..e555ded1a820bc9a75d0044d6fa1b7da08edd950 100644 (file)
@@ -32,7 +32,7 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -270,7 +270,6 @@ EGREP = @EGREP@
 ETAGS = @ETAGS@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FILECMD = @FILECMD@
 GCC_VISIBILITY_HIDDEN = @GCC_VISIBILITY_HIDDEN@
 GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
 GMSGFMT = @GMSGFMT@
@@ -299,6 +298,8 @@ LIBINTL = @LIBINTL@
 LIBLZMA_CFLAGS = @LIBLZMA_CFLAGS@
 LIBLZMA_LIBS = @LIBLZMA_LIBS@
 LIBOBJS = @LIBOBJS@
+LIBOSINFO_CFLAGS = @LIBOSINFO_CFLAGS@
+LIBOSINFO_LIBS = @LIBOSINFO_LIBS@
 LIBS = @LIBS@
 LIBTINFO_CFLAGS = @LIBTINFO_CFLAGS@
 LIBTINFO_LIBS = @LIBTINFO_LIBS@
@@ -369,6 +370,7 @@ PO4A_TRANSLATE = @PO4A_TRANSLATE@
 PODWRAPPER = @PODWRAPPER@
 POSUB = @POSUB@
 RANLIB = @RANLIB@
+REALPATH = @REALPATH@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
index cd7d8971ee067a401217f0a16ca54d1678de341c..767011f1c766c1bebdd28168c3d9724cc63498e6 100644 (file)
@@ -38,10 +38,14 @@ generator_built = \
 
 SOURCES_MLI = \
        firstboot.mli \
+       guest_packages.mli \
+       inject_virtio_win.mli \
        SELinux_relabel.mli
 
 SOURCES_ML = \
        firstboot.ml \
+       guest_packages.ml \
+       inject_virtio_win.ml \
        SELinux_relabel.ml
 
 if HAVE_OCAML
@@ -73,7 +77,8 @@ libmlcustomize_a_CPPFLAGS = \
        -I$(top_srcdir)/common/mlstdutils \
        -I$(top_srcdir)/common/mlgettext \
        -I$(top_srcdir)/common/mlpcre \
-       -I$(top_srcdir)/common/mltools
+       -I$(top_srcdir)/common/mltools \
+       -I$(top_srcdir)/common/mlxml
 libmlcustomize_a_CFLAGS = \
        $(WARN_CFLAGS) $(WERROR_CFLAGS) \
        -fPIC
@@ -89,6 +94,7 @@ OCAMLPACKAGES = \
        -I $(top_builddir)/common/mlgettext \
        -I $(top_builddir)/common/mlpcre \
        -I $(top_builddir)/common/mltools \
+       -I $(top_builddir)/common/mlxml \
        -I $(builddir)
 OCAMLPACKAGES_TESTS = $(MLCUSTOMIZE_CMA)
 if HAVE_OCAML_PKG_GETTEXT
index 9c121782d94335aa377d6cc2c1ceb20d1c9c9c0e..fc8fc535d5caaa093920c1772e106002c37700ff 100644 (file)
@@ -32,7 +32,7 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -487,7 +487,6 @@ EGREP = @EGREP@
 ETAGS = @ETAGS@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FILECMD = @FILECMD@
 GCC_VISIBILITY_HIDDEN = @GCC_VISIBILITY_HIDDEN@
 GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
 GMSGFMT = @GMSGFMT@
@@ -516,6 +515,8 @@ LIBINTL = @LIBINTL@
 LIBLZMA_CFLAGS = @LIBLZMA_CFLAGS@
 LIBLZMA_LIBS = @LIBLZMA_LIBS@
 LIBOBJS = @LIBOBJS@
+LIBOSINFO_CFLAGS = @LIBOSINFO_CFLAGS@
+LIBOSINFO_LIBS = @LIBOSINFO_LIBS@
 LIBS = @LIBS@
 LIBTINFO_CFLAGS = @LIBTINFO_CFLAGS@
 LIBTINFO_LIBS = @LIBTINFO_LIBS@
@@ -586,6 +587,7 @@ PO4A_TRANSLATE = @PO4A_TRANSLATE@
 PODWRAPPER = @PODWRAPPER@
 POSUB = @POSUB@
 RANLIB = @RANLIB@
+REALPATH = @REALPATH@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
@@ -748,10 +750,14 @@ generator_built = \
 
 SOURCES_MLI = \
        firstboot.mli \
+       guest_packages.mli \
+       inject_virtio_win.mli \
        SELinux_relabel.mli
 
 SOURCES_ML = \
        firstboot.ml \
+       guest_packages.ml \
+       inject_virtio_win.ml \
        SELinux_relabel.ml
 
 
@@ -775,7 +781,8 @@ SOURCES_ML = \
 @HAVE_OCAML_TRUE@      -I$(top_srcdir)/common/mlstdutils \
 @HAVE_OCAML_TRUE@      -I$(top_srcdir)/common/mlgettext \
 @HAVE_OCAML_TRUE@      -I$(top_srcdir)/common/mlpcre \
-@HAVE_OCAML_TRUE@      -I$(top_srcdir)/common/mltools
+@HAVE_OCAML_TRUE@      -I$(top_srcdir)/common/mltools \
+@HAVE_OCAML_TRUE@      -I$(top_srcdir)/common/mlxml
 
 @HAVE_OCAML_TRUE@libmlcustomize_a_CFLAGS = \
 @HAVE_OCAML_TRUE@      $(WARN_CFLAGS) $(WERROR_CFLAGS) \
@@ -789,7 +796,8 @@ SOURCES_ML = \
 @HAVE_OCAML_TRUE@      $(top_builddir)/common/mlstdutils -I \
 @HAVE_OCAML_TRUE@      $(top_builddir)/common/mlgettext -I \
 @HAVE_OCAML_TRUE@      $(top_builddir)/common/mlpcre -I \
-@HAVE_OCAML_TRUE@      $(top_builddir)/common/mltools -I $(builddir) \
+@HAVE_OCAML_TRUE@      $(top_builddir)/common/mltools -I \
+@HAVE_OCAML_TRUE@      $(top_builddir)/common/mlxml -I $(builddir) \
 @HAVE_OCAML_TRUE@      $(am__append_1)
 @HAVE_OCAML_TRUE@OCAMLPACKAGES_TESTS = $(MLCUSTOMIZE_CMA)
 @HAVE_OCAML_TRUE@OCAMLCLIBS = \
index 71b545da42f911d933d527bca165c89e74887127..22a96e04fc3ab3e03fb90570dfaa3b7ddcaa2da7 100644 (file)
@@ -6,7 +6,7 @@ libguestfs generated file
           and from the code in the generator/ subdirectory.
  ANY CHANGES YOU MAKE TO THIS FILE WILL BE LOST.
 
- Copyright (C) 2009-2020 Red Hat Inc.
+ Copyright (C) 2009-2023 Red Hat Inc.
 
  This program is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
@@ -169,6 +169,54 @@ L<virt-builder(1)/INSTALLING PACKAGES>.
 Set the hostname of the guest to C<HOSTNAME>.  You can use a
 dotted hostname.domainname (FQDN) if you want.
 
+=item B<--inject-qemu-ga> METHOD
+
+Inject the QEMU Guest Agent into a Windows guest.  The guest
+agent communicates with qemu through a socket in order to
+provide enhanced features (see L<qemu-ga(8)>).  This operation
+also injects a firstboot script so that the Guest Agent is
+installed when the guest boots.
+
+The parameter is the same as used by the I<--inject-virtio-win> operation.
+
+Note that to do a full conversion of a Windows guest from a
+foreign hypervisor like VMware (which involves many other operations)
+you should use the L<virt-v2v(1)> tool instead of this.
+
+=item B<--inject-virtio-win> METHOD
+
+Inject virtio-win drivers into a Windows guest.  These drivers
+add virtio accelerated drivers suitable when running on top of
+a hypervisor that supports virtio (such as qemu/KVM).  The
+operation also adjusts the Windows Registry so that the drivers
+are installed when the guest boots.
+
+The parameter can be one of:
+
+=over 4
+
+=item ISO
+
+The path to the ISO image containing the virtio-win drivers
+(eg. F</usr/share/virtio-win/virtio-win.iso>).
+
+=item DIR
+
+The directory containing the unpacked virtio-win drivers
+(eg. F</usr/share/virtio-win>).
+
+=item B<"osinfo">
+
+The literal string C<"osinfo"> means to use the
+libosinfo database to locate the drivers.  (See
+L<osinfo-query(1)>.
+
+=back
+
+Note that to do a full conversion of a Windows guest from a
+foreign hypervisor like VMware (which involves many other operations)
+you should use the L<virt-v2v(1)> tool instead of this.
+
 =item B<--install> PKG,PKG..
 
 Install the named packages (a comma-separated list).  These are
@@ -206,6 +254,19 @@ the image was built, use this option.
 
 See also: L</LOG FILE>.
 
+=item B<--no-selinux-relabel>
+
+Do not attempt to correct the SELinux labels of files in the guest.
+
+In such guests that support SELinux, customization automatically
+relabels files so that they have the correct SELinux label.  (The
+relabeling is performed immediately, but if the operation fails,
+customization will instead touch F</.autorelabel> on the image to
+schedule a relabel operation for the next time the image boots.)  This
+option disables the automatic relabeling.
+
+The option is a no-op for guests that do not support SELinux.
+
 =item B<--password> USER:SELECTOR
 
 Set the password for C<USER>.  (Note this option does I<not>
@@ -299,13 +360,7 @@ It cannot delete directories, only regular files.
 
 =item B<--selinux-relabel>
 
-Relabel files in the guest so that they have the correct SELinux label.
-
-This will attempt to relabel files immediately, but if the operation fails
-this will instead touch F</.autorelabel> on the image to schedule a
-relabel operation for the next time the image boots.
-
-You should only use this option for guests which support SELinux.
+This is a compatibility option that does nothing.
 
 =item B<--sm-attach> SELECTOR
 
index 5f185408978ca502c4eaeee96fb22114cbb04462..d04f421ea43e0f50d149453a18be2d6efb976cf7 100644 (file)
@@ -3,6 +3,7 @@
     [--copy-in LOCALPATH:REMOTEDIR] [--delete PATH] [--edit FILE:EXPR]
     [--firstboot SCRIPT] [--firstboot-command 'CMD+ARGS']
     [--firstboot-install PKG,PKG..] [--hostname HOSTNAME]
+    [--inject-qemu-ga METHOD] [--inject-virtio-win METHOD]
     [--install PKG,PKG..] [--link TARGET:LINK[:LINK..]] [--mkdir DIR]
     [--move SOURCE:DEST] [--password USER:SELECTOR]
     [--root-password SELECTOR] [--run SCRIPT]
@@ -12,5 +13,5 @@
     [--truncate-recursive PATH] [--timezone TIMEZONE] [--touch FILE]
     [--uninstall PKG,PKG..] [--update] [--upload FILE:DEST]
     [--write FILE:CONTENT] [--no-logfile]
-    [--password-crypto md5|sha256|sha512] [--selinux-relabel]
-    [--sm-credentials SELECTOR]
+    [--password-crypto md5|sha256|sha512] [--no-selinux-relabel]
+    [--selinux-relabel] [--sm-credentials SELECTOR]
index 9326baa00f75c382f61930945aff616de296f482..3c24315deec6e0323b099fa923b11294d2dd7d2e 100644 (file)
@@ -4,7 +4,7 @@
  *          and from the code in the generator/ subdirectory.
  * ANY CHANGES YOU MAKE TO THIS FILE WILL BE LOST.
  *
- * Copyright (C) 2009-2020 Red Hat Inc.
+ * Copyright (C) 2009-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -59,6 +59,10 @@ and op = [
       (* --firstboot-install PKG,PKG.. *)
   | `Hostname of string
       (* --hostname HOSTNAME *)
+  | `InjectQemuGA of string
+      (* --inject-qemu-ga METHOD *)
+  | `InjectVirtioWin of string
+      (* --inject-virtio-win METHOD *)
   | `InstallPackages of string list
       (* --install PKG,PKG.. *)
   | `Link of string * string list
@@ -109,7 +113,9 @@ and flags = {
       (* --no-logfile *)
   password_crypto : Password.password_crypto option;
       (* --password-crypto md5|sha256|sha512 *)
-  selinux_relabel : bool;
+  no_selinux_relabel : bool;
+      (* --no-selinux-relabel *)
+  selinux_relabel_ignored : bool;
       (* --selinux-relabel *)
   sm_credentials : Subscription_manager.sm_credentials option;
       (* --sm-credentials SELECTOR *)
@@ -121,7 +127,8 @@ let rec argspec () =
   let ops = ref [] in
   let scrub_logfile = ref false in
   let password_crypto = ref None in
-  let selinux_relabel = ref false in
+  let no_selinux_relabel = ref false in
+  let selinux_relabel_ignored = ref false in
   let sm_credentials = ref None in
 
   let rec get_ops () = {
@@ -131,7 +138,8 @@ let rec argspec () =
   and get_flags () = {
     scrub_logfile = !scrub_logfile;
     password_crypto = !password_crypto;
-    selinux_relabel = !selinux_relabel;
+    no_selinux_relabel = !no_selinux_relabel;
+    selinux_relabel_ignored = !selinux_relabel_ignored;
     sm_credentials = !sm_credentials;
   }
   in
@@ -258,6 +266,18 @@ let rec argspec () =
       s_"Set the hostname"
     ),
     Some "HOSTNAME", "Set the hostname of the guest to C<HOSTNAME>.  You can use a\ndotted hostname.domainname (FQDN) if you want.";
+    (
+      [ L"inject-qemu-ga" ],
+      Getopt.String (s_"METHOD", fun s -> List.push_front (`InjectQemuGA s) ops),
+      s_"Inject the QEMU Guest Agent into a Windows guest"
+    ),
+    Some "METHOD", "Inject the QEMU Guest Agent into a Windows guest.  The guest\nagent communicates with qemu through a socket in order to\nprovide enhanced features (see L<qemu-ga(8)>).  This operation\nalso injects a firstboot script so that the Guest Agent is\ninstalled when the guest boots.\n\nThe parameter is the same as used by the I<--inject-virtio-win> operation.\n\nNote that to do a full conversion of a Windows guest from a\nforeign hypervisor like VMware (which involves many other operations)\nyou should use the L<virt-v2v(1)> tool instead of this.";
+    (
+      [ L"inject-virtio-win" ],
+      Getopt.String (s_"METHOD", fun s -> List.push_front (`InjectVirtioWin s) ops),
+      s_"Inject virtio-win drivers into a Windows guest"
+    ),
+    Some "METHOD", "Inject virtio-win drivers into a Windows guest.  These drivers\nadd virtio accelerated drivers suitable when running on top of\na hypervisor that supports virtio (such as qemu/KVM).  The\noperation also adjusts the Windows Registry so that the drivers\nare installed when the guest boots.\n\nThe parameter can be one of:\n\n=over 4\n\n=item ISO\n\nThe path to the ISO image containing the virtio-win drivers\n(eg. F</usr/share/virtio-win/virtio-win.iso>).\n\n=item DIR\n\nThe directory containing the unpacked virtio-win drivers\n(eg. F</usr/share/virtio-win>).\n\n=item B<\"osinfo\">\n\nThe literal string C<\"osinfo\"> means to use the\nlibosinfo database to locate the drivers.  (See\nL<osinfo-query(1)>.\n\n=back\n\nNote that to do a full conversion of a Windows guest from a\nforeign hypervisor like VMware (which involves many other operations)\nyou should use the L<virt-v2v(1)> tool instead of this.";
     (
       [ L"install" ],
       Getopt.String (
@@ -458,12 +478,18 @@ let rec argspec () =
       s_"Set password crypto"
     ),
     Some "md5|sha256|sha512", "When the virt tools change or set a password in the guest, this\noption sets the password encryption of that password to\nC<md5>, C<sha256> or C<sha512>.\n\nC<sha256> and C<sha512> require glibc E<ge> 2.7 (check crypt(3) inside\nthe guest).\n\nC<md5> will work with relatively old Linux guests (eg. RHEL 3), but\nis not secure against modern attacks.\n\nThe default is C<sha512> unless libguestfs detects an old guest that\ndidn't have support for SHA-512, in which case it will use C<md5>.\nYou can override libguestfs by specifying this option.\n\nNote this does not change the default password encryption used\nby the guest when you create new user accounts inside the guest.\nIf you want to do that, then you should use the I<--edit> option\nto modify C</etc/sysconfig/authconfig> (Fedora, RHEL) or\nC</etc/pam.d/common-password> (Debian, Ubuntu).";
+    (
+      [ L"no-selinux-relabel" ],
+      Getopt.Set no_selinux_relabel,
+      s_"Do not relabel files with correct SELinux labels"
+    ),
+    None, "Do not attempt to correct the SELinux labels of files in the guest.\n\nIn such guests that support SELinux, customization automatically\nrelabels files so that they have the correct SELinux label.  (The\nrelabeling is performed immediately, but if the operation fails,\ncustomization will instead touch F</.autorelabel> on the image to\nschedule a relabel operation for the next time the image boots.)  This\noption disables the automatic relabeling.\n\nThe option is a no-op for guests that do not support SELinux.";
     (
       [ L"selinux-relabel" ],
-      Getopt.Set selinux_relabel,
-      s_"Relabel files with correct SELinux labels"
+      Getopt.Set selinux_relabel_ignored,
+      s_"Compatibility option doing nothing"
     ),
-    None, "Relabel files in the guest so that they have the correct SELinux label.\n\nThis will attempt to relabel files immediately, but if the operation fails\nthis will instead touch F</.autorelabel> on the image to schedule a\nrelabel operation for the next time the image boots.\n\nYou should only use this option for guests which support SELinux.";
+    None, "This is a compatibility option that does nothing.";
     (
       [ L"sm-credentials" ],
       Getopt.String (
index 14eda49eb1fb81e1fc55a15266898756f95bd8a7..0cc166e673a2852cfb7935a47cce379305a5af66 100644 (file)
@@ -4,7 +4,7 @@
  *          and from the code in the generator/ subdirectory.
  * ANY CHANGES YOU MAKE TO THIS FILE WILL BE LOST.
  *
- * Copyright (C) 2009-2020 Red Hat Inc.
+ * Copyright (C) 2009-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -51,6 +51,10 @@ and op = [
       (* --firstboot-install PKG,PKG.. *)
   | `Hostname of string
       (* --hostname HOSTNAME *)
+  | `InjectQemuGA of string
+      (* --inject-qemu-ga METHOD *)
+  | `InjectVirtioWin of string
+      (* --inject-virtio-win METHOD *)
   | `InstallPackages of string list
       (* --install PKG,PKG.. *)
   | `Link of string * string list
@@ -101,7 +105,9 @@ and flags = {
       (* --no-logfile *)
   password_crypto : Password.password_crypto option;
       (* --password-crypto md5|sha256|sha512 *)
-  selinux_relabel : bool;
+  no_selinux_relabel : bool;
+      (* --no-selinux-relabel *)
+  selinux_relabel_ignored : bool;
       (* --selinux-relabel *)
   sm_credentials : Subscription_manager.sm_credentials option;
       (* --sm-credentials SELECTOR *)
index 5c7fd0da5f97e90a9f12082f65cc234c2ab56f5f..5dc01234091e18368eb288d1a5a41f0f0a59b75a 100644 (file)
@@ -151,7 +151,8 @@ WantedBy=%s
 
   and install_sysvinit_service g root distro major =
     match distro with
-    | "fedora"|"rhel"|"centos"|"scientificlinux"|"oraclelinux"|"redhat-based" ->
+    | "fedora"|"rhel"|"centos"|"scientificlinux"|"oraclelinux"|"rocky"|
+        "redhat-based" ->
       install_sysvinit_redhat g
     | "opensuse"|"sles"|"suse-based" ->
       install_sysvinit_suse g
@@ -368,3 +369,34 @@ let add_firstboot_script (g : Guestfs.guestfs) root ?(prio = 5000) name
 
   | _ ->
     error (f_"guest type %s/%s is not supported") typ distro
+
+(* Unfortunately Powershell scripts cannot be directly executed
+ * (unless some system config changes are made which for other
+ * reasons we don't want to do) and so we have to run this via
+ * a regular batch file.
+ *)
+let add_firstboot_powershell g root ?prio name code =
+  (* Fail hard if inspection hasn't been done or it's not a Windows
+   * guest.  If it happens it indicates an internal error in the
+   * calling code.
+   *)
+  assert (g#inspect_get_type root = "windows");
+
+  let windows_systemroot = g#inspect_get_windows_systemroot root in
+
+  (* Create the temporary directory to put the Powershell file. *)
+  let tempdir = sprintf "%s/Temp" windows_systemroot in
+  g#mkdir_p tempdir;
+  let code = String.concat "\r\n" code ^ "\r\n" in
+  g#write (sprintf "%s/%s" tempdir name) code;
+
+  (* Powershell interpreter.  Should we check this exists? XXX *)
+  let ps_exe =
+    windows_systemroot ^
+    "\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" in
+
+  (* Windows path to the Powershell script. *)
+  let ps_path = windows_systemroot ^ "\\Temp\\" ^ name in
+
+  let fb = sprintf "%s -ExecutionPolicy ByPass -file %s" ps_exe ps_path in
+  add_firstboot_script g root ?prio name fb
index 67eb5ae5836e82d306027ed99018f97d5c8659b3..8231af658e4da6161458d04acaef55de1d4ede38 100644 (file)
@@ -21,8 +21,15 @@ val add_firstboot_script : Guestfs.guestfs -> string -> ?prio:int -> string ->
   (** [add_firstboot_script g root prio name content] adds a firstboot
       script called [name] containing [content] with priority [prio].
 
+      [g] is the guestfs handle.  The disks must be mounted up and
+      inspection data must be available.
+
       [content] is the contents of the script, {b not} a filename.
 
+      The script is running using the shell (usually [/bin/sh]) on Linux
+      or as a Windows batch file.  To use Windows Powershell, see
+      {!add_firstboot_powershell} instead.
+
       The actual name of the script on the guest filesystem is made of [name]
       with all characters but alphanumeric replaced with dashes.
 
@@ -35,3 +42,12 @@ val add_firstboot_script : Guestfs.guestfs -> string -> ?prio:int -> string ->
 
       For Linux guests using SELinux you should make sure the
       filesystem is relabelled after calling this. *)
+
+val add_firstboot_powershell : Guestfs.guestfs -> string ->
+                               ?prio:int -> string -> string list -> unit
+(** [add_firstboot_powershell] is like {!add_firstboot_script} except
+    that it adds a Windows Powershell script instead of a batch
+    file.
+
+    The parameters are: [g root prio name lines] (where the Powershell
+    script is passed in as lines of code). *)
diff --git a/common/mlcustomize/guest_packages.ml b/common/mlcustomize/guest_packages.ml
new file mode 100644 (file)
index 0000000..2602fc7
--- /dev/null
@@ -0,0 +1,132 @@
+(* virt-customize
+ * Copyright (C) 2012-2023 Red Hat Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *)
+
+open Printf
+
+open Common_gettext.Gettext
+open Std_utils
+
+exception Unknown_package_manager of string
+exception Unimplemented_package_manager of string
+
+(* Windows has package_management == "unknown". *)
+let error_unknown_package_manager flag =
+  let msg = sprintf (f_"cannot use ‘%s’ because no package manager has been \
+                        detected for this guest OS.\n\nIf this guest OS is a \
+                        common one with ordinary package management then this \
+                        may have been caused by a failure of libguestfs \
+                        inspection.\n\nFor OSes such as Windows that lack \
+                        package management, this is not possible.  Try using \
+                        one of the ‘--firstboot*’ flags instead (described in \
+                        the virt-customize(1) manual).") flag in
+  raise (Unknown_package_manager msg)
+
+let error_unimplemented_package_manager flag pm =
+  let msg = sprintf (f_"sorry, ‘%s’ with the ‘%s’ package manager has not \
+                        been implemented yet.\n\nYou can work around this by \
+                        using one of the ‘--run*’ or ‘--firstboot*’ options \
+                        instead (described in the virt-customize(1) manual).")
+                    flag pm in
+  raise (Unimplemented_package_manager msg)
+
+(* http://distrowatch.com/dwres.php?resource=package-management *)
+let install_command packages package_management =
+  let quoted_args = String.concat " " (List.map quote packages) in
+  match package_management with
+  | "apk" ->
+     sprintf "
+       apk update
+       apk add %s
+     " quoted_args
+  | "apt" ->
+    (* http://unix.stackexchange.com/questions/22820 *)
+    sprintf "
+      export DEBIAN_FRONTEND=noninteractive
+      apt_opts='-q -y -o Dpkg::Options::=--force-confnew'
+      apt-get $apt_opts update
+      apt-get $apt_opts install %s
+    " quoted_args
+  | "dnf" ->
+     sprintf "dnf%s -y install %s"
+             (if verbose () then " --verbose" else "")
+             quoted_args
+  | "pisi" ->   sprintf "pisi it %s" quoted_args
+  | "pacman" -> sprintf "pacman -S --noconfirm %s" quoted_args
+  | "urpmi" ->  sprintf "urpmi %s" quoted_args
+  | "xbps" ->   sprintf "xbps-install -Sy %s" quoted_args
+  | "yum" ->    sprintf "yum -y install %s" quoted_args
+  | "zypper" -> sprintf "zypper -n in -l %s" quoted_args
+
+  | "unknown" ->
+    error_unknown_package_manager "--install"
+  | pm ->
+    error_unimplemented_package_manager "--install" pm
+
+let update_command package_management =
+  match package_management with
+  | "apk" ->
+     "
+       apk update
+       apk upgrade
+     "
+  | "apt" ->
+    (* http://unix.stackexchange.com/questions/22820 *)
+    "
+      export DEBIAN_FRONTEND=noninteractive
+      apt_opts='-q -y -o Dpkg::Options::=--force-confnew'
+      apt-get $apt_opts update
+      apt-get $apt_opts upgrade
+    "
+  | "dnf" ->
+     sprintf "dnf%s -y --best upgrade"
+             (if verbose () then " --verbose" else "")
+  | "pisi" ->   "pisi upgrade"
+  | "pacman" -> "pacman -Su"
+  | "urpmi" ->  "urpmi --auto-select"
+  | "xbps" ->   "xbps-install -Suy"
+  | "yum" ->    "yum -y update"
+  | "zypper" -> "zypper -n dup -l"
+
+  | "unknown" ->
+    error_unknown_package_manager "--update"
+  | pm ->
+    error_unimplemented_package_manager "--update" pm
+
+let uninstall_command packages package_management =
+  let quoted_args = String.concat " " (List.map quote packages) in
+  match package_management with
+  | "apk" -> sprintf "apk del %s" quoted_args
+  | "apt" ->
+    (* http://unix.stackexchange.com/questions/22820 *)
+    sprintf "
+      export DEBIAN_FRONTEND=noninteractive
+      apt_opts='-q -y -o Dpkg::Options::=--force-confnew'
+      apt-get $apt_opts remove %s
+    " quoted_args
+  | "dnf" ->    sprintf "dnf -y remove %s" quoted_args
+  | "pisi" ->   sprintf "pisi rm %s" quoted_args
+  | "pacman" -> sprintf "pacman -R %s" quoted_args
+  | "urpmi" ->  sprintf "urpme %s" quoted_args
+  | "xbps" ->   sprintf "xbps-remove -Sy %s" quoted_args
+  | "yum" ->    sprintf "yum -y remove %s" quoted_args
+  | "zypper" -> sprintf "zypper -n rm %s" quoted_args
+
+  | "unknown" ->
+    error_unknown_package_manager "--uninstall"
+  | pm ->
+    error_unimplemented_package_manager "--uninstall" pm
diff --git a/common/mlcustomize/guest_packages.mli b/common/mlcustomize/guest_packages.mli
new file mode 100644 (file)
index 0000000..0aaca06
--- /dev/null
@@ -0,0 +1,44 @@
+(* virt-customize
+ * Copyright (C) 2012-2023 Red Hat Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *)
+
+exception Unknown_package_manager of string
+exception Unimplemented_package_manager of string
+(** For all three functions below, [package_management] determines the package
+    management system in use by the guest; commonly it should be filled in from
+    [Guestfs.inspect_get_package_management], or the equivalent guestfs object
+    method.
+
+    If [package_management] is unknown or unimplemented, the functions raise
+    [Unknown_package_manager "error message"] or [Unimplemented_package_manager
+    "error message"], correspondingly. *)
+
+val install_command : string list -> string -> string
+(** [install_command packages package_management] produces a properly quoted
+    shell command string suitable for execution in the guest (directly or via a
+    Firstboot script) for installing the OS packages listed in [packages]. *)
+
+val update_command : string -> string
+(** [update_command package_management] produces a properly quoted shell command
+    string suitable for execution in the guest (directly or via a Firstboot
+    script) for updating the OS packages that are currently installed in the
+    guest. *)
+
+val uninstall_command : string list -> string -> string
+(** [uninstall_command packages package_management] produces a properly quoted
+    shell command string suitable for execution in the guest (directly or via a
+    Firstboot script) for uninstalling the OS packages listed in [packages]. *)
diff --git a/common/mlcustomize/inject_virtio_win.ml b/common/mlcustomize/inject_virtio_win.ml
new file mode 100644 (file)
index 0000000..5f4aab7
--- /dev/null
@@ -0,0 +1,576 @@
+(* virt-v2v
+ * Copyright (C) 2009-2023 Red Hat Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *)
+
+open Printf
+
+open Std_utils
+open Tools_utils
+open Common_gettext.Gettext
+
+open Regedit
+
+type t = {
+  g : Guestfs.guestfs; (** guestfs handle *)
+
+  root : string; (** root of inspection *)
+
+  i_arch : string;
+  i_major_version : int;
+  i_minor_version : int;
+  i_osinfo : string;
+  i_product_variant : string;
+  i_windows_current_control_set : string;
+  i_windows_systemroot : string;
+  (** Inspection data needed by this module. *)
+
+  virtio_win : string;
+  (** Path to the virtio-win ISO or directory. *)
+
+  was_set : bool;
+  (** If the virtio_win path was explicitly set, for example by
+      the user setting an environment variable.
+
+      This is used to "show intention" to use virtio-win instead
+      of libosinfo.  Although this behaviour is documented, IMHO it has
+      always been a bad idea.  We should change this in future to allow
+      the user to select where they want to get drivers from. XXX *)
+}
+
+type block_type = Virtio_blk | IDE
+and net_type = Virtio_net | E1000 | RTL8139
+and machine_type = I440FX | Q35 | Virt
+
+type virtio_win_installed = {
+  block_driver : block_type;
+  net_driver : net_type;
+  virtio_rng : bool;
+  virtio_balloon : bool;
+  isa_pvpanic : bool;
+  virtio_socket : bool;
+  machine : machine_type;
+  virtio_1_0 : bool;
+}
+
+let rec from_environment g root datadir =
+  let t = get_inspection g root in
+
+  let virtio_win, was_set =
+    try Sys.getenv "VIRTIO_WIN", true
+    with Not_found ->
+      try Sys.getenv "VIRTIO_WIN_DIR" (* old name for VIRTIO_WIN *), true
+      with Not_found ->
+        let iso = datadir // "virtio-win" // "virtio-win.iso" in
+        (if Sys.file_exists iso then iso
+         else datadir // "virtio-win"), false in
+
+  { t with virtio_win; was_set }
+
+and from_path g root path =
+  let t = get_inspection g root in
+  { t with virtio_win = path; was_set = true }
+
+and from_libosinfo g root =
+  let t = get_inspection g root in
+  { t with virtio_win = ""; was_set = false }
+
+and get_inspection g root =
+  (* Fail hard if inspection hasn't been done or it's not a Windows
+   * guest.  If it happens it indicates an internal error in the
+   * calling code.
+   *)
+  assert (g#inspect_get_type root = "windows");
+
+  let i_arch = g#inspect_get_arch root in
+  let i_major_version = g#inspect_get_major_version root in
+  let i_minor_version = g#inspect_get_minor_version root in
+  let i_osinfo = g#inspect_get_osinfo root in
+  let i_product_variant = g#inspect_get_product_variant root in
+  let i_windows_current_control_set =
+    g#inspect_get_windows_current_control_set root in
+  let i_windows_systemroot = g#inspect_get_windows_systemroot root in
+
+  { g; root;
+    i_arch; i_major_version; i_minor_version; i_osinfo;
+    i_product_variant; i_windows_current_control_set; i_windows_systemroot;
+    virtio_win = ""; was_set = false }
+
+let scsi_class_guid = "{4D36E97B-E325-11CE-BFC1-08002BE10318}"
+let viostor_legacy_pciid = "VEN_1AF4&DEV_1001&SUBSYS_00021AF4&REV_00"
+let viostor_modern_pciid = "VEN_1AF4&DEV_1042&SUBSYS_11001AF4&REV_01"
+let vioscsi_legacy_pciid = "VEN_1AF4&DEV_1004&SUBSYS_00081AF4&REV_00"
+let vioscsi_modern_pciid = "VEN_1AF4&DEV_1048&SUBSYS_11001AF4&REV_01"
+
+let rec inject_virtio_win_drivers ({ g } as t) reg =
+  (* Copy the virtio drivers to the guest. *)
+  let driverdir = sprintf "%s/Drivers/VirtIO" t.i_windows_systemroot in
+  g#mkdir_p driverdir;
+
+  (* XXX Inelegant hack copied originally from [Convert_windows].
+   * We should be able to work this into the code properly later.
+   *)
+  let (machine : machine_type), virtio_1_0 =
+    match t.i_arch with
+    | ("i386"|"x86_64") ->
+       (try
+          (* Fall back to the decision that's based on the year that the OS
+           * was released in under three circumstances:
+           * - the user specified the location of the Windows virtio drivers
+           *   through an environment variable, or
+           * - "Libosinfo_utils.get_os_by_short_id" fails to look up the OS,
+           *   or
+           * - "Libosinfo_utils.best_driver" cannot find any matching driver.
+           * In each of these cases, a "Not_found" exception is raised.  This
+           * behavior exactly mirrors that of "Windows_virtio.copy_drivers".
+           *)
+          if t.was_set then raise Not_found;
+          let os = Libosinfo_utils.get_os_by_short_id t.i_osinfo in
+          let devices = os#get_devices ()
+          and drivers = os#get_device_drivers () in
+          let best_drv_devs =
+            (Libosinfo_utils.best_driver drivers t.i_arch).devices in
+          debug "libosinfo internal devices for OS \"%s\":\n%s"
+            t.i_osinfo
+            (Libosinfo_utils.string_of_osinfo_device_list devices);
+          debug "libosinfo \"best driver\" devices for OS \"%s\":\n%s"
+            t.i_osinfo
+            (Libosinfo_utils.string_of_osinfo_device_list best_drv_devs);
+          let { Libosinfo_utils.q35; vio10 } =
+            Libosinfo_utils.os_support_of_osinfo_device_list
+              (devices @ best_drv_devs) in
+          (if q35 then Q35 else I440FX), vio10
+        with
+        | Not_found ->
+           (* Pivot on the year 2007.  Any Windows version from earlier than
+            * 2007 should use i440fx, anything 2007 or newer should use q35.
+            * Luckily this coincides almost exactly with the release of NT 6.
+            *)
+           (if t.i_major_version < 6 then I440FX else Q35), true
+       )
+    | _ -> Virt, true
+  in
+
+  if not (copy_drivers t driverdir) then (
+      warning (f_"there are no virtio drivers available for this version of Windows (%d.%d %s %s %s).  virt-v2v looks for drivers in %s\n\nThe guest will be configured to use slower emulated devices.")
+              t.i_major_version t.i_minor_version t.i_arch
+              t.i_product_variant t.i_osinfo t.virtio_win;
+      { block_driver = IDE; net_driver = RTL8139;
+        virtio_rng = false; virtio_balloon = false;
+        isa_pvpanic = false; virtio_socket = false;
+        machine; virtio_1_0; }
+  )
+  else (
+    (* Can we install the block driver? *)
+    let block : block_type =
+      let filenames = ["virtio_blk"; "vrtioblk"; "viostor"] in
+      let viostor_driver = try (
+        Some (
+          List.find (
+            fun driver_file ->
+              let source = driverdir // driver_file ^ ".sys" in
+              g#exists source
+          ) filenames
+        )
+      ) with Not_found -> None in
+      match viostor_driver with
+      | None ->
+        warning (f_"there is no virtio block device driver for this version of Windows (%d.%d %s).  virt-v2v looks for this driver in %s\n\nThe guest will be configured to use a slower emulated device.")
+                t.i_major_version t.i_minor_version
+                t.i_arch t.virtio_win;
+        IDE
+
+      | Some driver_name ->
+        (* Block driver needs tweaks to allow booting; the rest is set up by PnP
+         * manager *)
+        let source = driverdir // (driver_name ^ ".sys") in
+        let target = sprintf "%s/system32/drivers/%s.sys"
+                             t.i_windows_systemroot driver_name in
+        let target = g#case_sensitive_path target in
+        g#cp source target;
+        add_guestor_to_registry t reg driver_name viostor_legacy_pciid;
+        add_guestor_to_registry t reg driver_name viostor_modern_pciid;
+        Virtio_blk in
+
+    (* Can we install the virtio-net driver? *)
+    let net : net_type =
+      let filenames = ["virtio_net.inf"; "netkvm.inf"] in
+      let has_netkvm =
+        List.exists (
+          fun driver_file -> g#exists (driverdir // driver_file)
+        ) filenames in
+      if not has_netkvm then (
+        warning (f_"there is no virtio network driver for this version of Windows (%d.%d %s).  virt-v2v looks for this driver in %s\n\nThe guest will be configured to use a slower emulated device.")
+                t.i_major_version t.i_minor_version
+                t.i_arch t.virtio_win;
+        RTL8139
+      )
+      else
+        Virtio_net in
+
+    (* The "fwcfg" driver binds the fw_cfg device for real, and provides three
+     * files -- ".cat", ".inf", ".sys".  (Possibly ".pdb" too.)
+     *
+     * The "qemufwcfg" driver is only a stub driver; it placates Device Manager
+     * (hides the "unknown device" question mark) but does not actually drive
+     * the fw_cfg device.  It provides two files only -- ".cat", ".inf".
+     *
+     * These drivers conflict with each other (RHBZ#2151752).  If we've copied
+     * both (either from libosinfo of virtio-win), let "fwcfg" take priority:
+     * remove "qemufwcfg".
+     *)
+    if g#exists (driverdir // "fwcfg.inf") &&
+       g#exists (driverdir // "qemufwcfg.inf") then (
+      debug "windows: skipping qemufwcfg stub driver in favor of fwcfg driver";
+      Array.iter g#rm (g#glob_expand (driverdir // "qemufwcfg.*"))
+    );
+
+    (* Did we install the miscellaneous drivers? *)
+    { block_driver = block;
+      net_driver = net;
+      virtio_rng = g#exists (driverdir // "viorng.inf");
+      virtio_balloon = g#exists (driverdir // "balloon.inf");
+      isa_pvpanic = g#exists (driverdir // "pvpanic.inf");
+      virtio_socket = g#exists (driverdir // "viosock.inf");
+      machine; virtio_1_0;
+    }
+  )
+
+and inject_qemu_ga t =
+  let msi_files = copy_qemu_ga t in
+  if msi_files <> [] then
+    configure_qemu_ga t msi_files;
+  msi_files <> [] (* return true if we found some qemu-ga MSI files *)
+
+and add_guestor_to_registry t ((g, root) as reg) drv_name drv_pciid =
+  let ddb_node = g#hivex_node_get_child root "DriverDatabase" in
+
+  let regedits =
+    if ddb_node = 0L then
+      cdb_regedits t drv_name drv_pciid
+    else
+      ddb_regedits t drv_name drv_pciid in
+
+  let drv_sys_path = sprintf "system32\\drivers\\%s.sys" drv_name in
+  let common_regedits = [
+      [ t.i_windows_current_control_set; "Services"; drv_name ],
+      [ "Type", REG_DWORD 0x1_l;
+        "Start", REG_DWORD 0x0_l;
+        "Group", REG_SZ "SCSI miniport";
+        "ErrorControl", REG_DWORD 0x1_l;
+        "ImagePath", REG_EXPAND_SZ drv_sys_path ];
+  ] in
+
+  reg_import reg (regedits @ common_regedits)
+
+and cdb_regedits t drv_name drv_pciid =
+  (* See http://rwmj.wordpress.com/2010/04/30/tip-install-a-device-driver-in-a-windows-vm/
+   * NB: All these edits are in the HKLM\SYSTEM hive.  No other
+   * hive may be modified here.
+   *)
+  [
+    [ t.i_windows_current_control_set;
+      "Control"; "CriticalDeviceDatabase";
+      "PCI#" ^ drv_pciid ],
+    [ "Service", REG_SZ drv_name;
+      "ClassGUID", REG_SZ scsi_class_guid ];
+  ]
+
+and ddb_regedits inspect drv_name drv_pciid =
+  (* Windows >= 8 doesn't use the CriticalDeviceDatabase.  Instead
+   * one must add keys into the DriverDatabase.
+   *)
+
+  let drv_inf = "guestor.inf" in
+  let drv_inf_label = drv_inf ^ "_tmp" in
+  let drv_config = "guestor_conf" in
+
+  [
+    [ "DriverDatabase"; "DriverInfFiles"; drv_inf ],
+    [ "", REG_MULTI_SZ [ drv_inf_label ];
+      "Active", REG_SZ drv_inf_label;
+      "Configurations", REG_MULTI_SZ [ drv_config ] ];
+
+    [ "DriverDatabase"; "DeviceIds"; "PCI"; drv_pciid ],
+    [ drv_inf, REG_BINARY "\x01\xff\x00\x00" ];
+
+    [ "DriverDatabase"; "DriverPackages"; drv_inf_label ],
+    [ "Version", REG_BINARY ("\x00\xff\x09\x00\x00\x00\x00\x00" ^
+                             "\x7b\xe9\x36\x4d\x25\xe3\xce\x11" ^
+                             "\xbf\xc1\x08\x00\x2b\xe1\x03\x18" ^
+                             (String.make 24 '\x00')) ];
+    (* Version is necessary for Windows-Kernel-Pnp in w10/w2k16 *)
+
+    [ "DriverDatabase"; "DriverPackages"; drv_inf_label;
+      "Configurations"; drv_config ],
+    [ "ConfigFlags", REG_DWORD 0_l;
+      "Service", REG_SZ drv_name ];
+
+    [ "DriverDatabase"; "DriverPackages"; drv_inf_label;
+      "Descriptors"; "PCI"; drv_pciid ],
+    [ "Configuration", REG_SZ drv_config ];
+  ]
+
+(* Copy the matching drivers to the driverdir; return true if any have
+ * been copied.
+ *)
+and copy_drivers t driverdir =
+  (not t.was_set && [] <> copy_from_libosinfo t driverdir) ||
+    [] <> copy_from_virtio_win t "/" driverdir
+            (virtio_iso_path_matches_guest_os t)
+      (fun () ->
+        error (f_"root directory ‘/’ is missing from the virtio-win directory or ISO.\n\nThis should not happen and may indicate that virtio-win or virt-v2v is broken in some way.  Please report this as a bug with a full debug log."))
+
+and copy_qemu_ga t =
+  copy_from_virtio_win t "/" "/" (virtio_iso_path_matches_qemu_ga t)
+    (fun () ->
+      error (f_"root directory ‘/’ is missing from the virtio-win directory or ISO.\n\nThis should not happen and may indicate that virtio-win or virt-v2v is broken in some way.  Please report this as a bug with a full debug log."))
+
+(* Copy all files from virtio_win directory/ISO located in [srcdir]
+ * subdirectory and all its subdirectories to the [destdir]. The directory
+ * hierarchy is not preserved, meaning all files will be directly in [destdir].
+ * The file list is filtered based on [filter] function.
+ *
+ * If [srcdir] is missing from the ISO then [missing ()] is called
+ * which might give a warning or error.
+ *
+ * Returns list of copied files.
+ *)
+and copy_from_virtio_win ({ g } as t) srcdir destdir filter missing =
+  let ret = ref [] in
+  if is_directory t.virtio_win then (
+    debug "windows: copy_from_virtio_win: guest tools source directory %s"
+      t.virtio_win;
+
+    let dir = t.virtio_win // srcdir in
+    if not (is_directory dir) then missing ()
+    else (
+      let cmd = sprintf "cd %s && find -L -type f" (quote dir) in
+      let paths = external_command cmd in
+      List.iter (
+        fun path ->
+          if filter path then (
+            let source = dir // path in
+            let target_name = String.lowercase_ascii (Filename.basename path) in
+            let target = destdir // target_name in
+            debug "windows: copying guest tools bits: 'host:%s' -> '%s'"
+                  source target;
+
+            g#write target (read_whole_file source);
+            List.push_front target_name ret
+          )
+      ) paths
+    )
+  )
+  else if is_regular_file t.virtio_win || is_block_device t.virtio_win then (
+    debug "windows: copy_from_virtio_win: guest tools source ISO %s"
+      t.virtio_win;
+
+    let g2 =
+      try
+        let g2 = open_guestfs ~identifier:"virtio_win" () in
+        g2#add_drive_opts t.virtio_win ~readonly:true;
+        g2#launch ();
+        g2
+      with Guestfs.Error msg ->
+        error (f_"%s: cannot open virtio-win ISO file: %s") t.virtio_win msg in
+    (* Note we are mounting this as root on the *second*
+     * handle, not the main handle containing the guest.
+     *)
+    g2#mount_ro "/dev/sda" "/";
+    let srcdir = "/" ^ srcdir in
+    if not (g2#is_dir srcdir) then missing ()
+    else (
+      let paths = g2#find srcdir in
+      Array.iter (
+        fun path ->
+          let source = srcdir ^ "/" ^ path in
+          if g2#is_file source ~followsymlinks:false && filter path then (
+            let target_name = String.lowercase_ascii (Filename.basename path) in
+            let target = destdir ^ "/" ^ target_name in
+            debug "windows: copying guest tools bits: '%s:%s' -> '%s'"
+              t.virtio_win path target;
+
+            g#write target (g2#read_file source);
+            List.push_front target_name ret
+          )
+      ) paths;
+    );
+    g2#close()
+  );
+  !ret
+
+(* Given a path of a file relative to the root of the directory tree
+ * with virtio-win drivers, figure out if it's suitable for the
+ * specific Windows flavor of the current guest.
+ *)
+and virtio_iso_path_matches_guest_os t path =
+  let { i_major_version = os_major; i_minor_version = os_minor;
+        i_arch = arch; i_product_variant = os_variant;
+        i_osinfo = osinfo } = t in
+  try
+    (* Lowercased path, since the ISO may contain upper or lowercase path
+     * elements.
+     *)
+    let lc_path = String.lowercase_ascii path in
+
+    (* Using the full path, work out what version of Windows
+     * this driver is for.  Paths can be things like:
+     * "NetKVM/2k12R2/amd64/netkvm.sys" or
+     * "./drivers/amd64/Win2012R2/netkvm.sys".
+     * Note we check lowercase paths.
+     *)
+    let pathelem elem = String.find lc_path ("/" ^ elem ^ "/") >= 0 in
+    let p_arch =
+      if pathelem "x86" || pathelem "i386" then "i386"
+      else if pathelem "amd64" then "x86_64"
+      else raise Not_found in
+
+    let is_client os_variant = os_variant = "Client"
+    and not_client os_variant = os_variant <> "Client"
+    and any_variant os_variant = true
+    and any_osinfo osinfo = true in
+    let p_os_major, p_os_minor, match_os_variant, match_osinfo =
+      if pathelem "xp" || pathelem "winxp" then
+        (5, 1, any_variant, any_osinfo)
+      else if pathelem "2k3" || pathelem "win2003" then
+        (5, 2, any_variant, any_osinfo)
+      else if pathelem "vista" then
+        (6, 0, is_client, any_osinfo)
+      else if pathelem "2k8" || pathelem "win2008" then
+        (6, 0, not_client, any_osinfo)
+      else if pathelem "w7" || pathelem "win7" then
+        (6, 1, is_client, any_osinfo)
+      else if pathelem "2k8r2" || pathelem "win2008r2" then
+        (6, 1, not_client, any_osinfo)
+      else if pathelem "w8" || pathelem "win8" then
+        (6, 2, is_client, any_osinfo)
+      else if pathelem "2k12" || pathelem "win2012" then
+        (6, 2, not_client, any_osinfo)
+      else if pathelem "w8.1" || pathelem "win8.1" then
+        (6, 3, is_client, any_osinfo)
+      else if pathelem "2k12r2" || pathelem "win2012r2" then
+        (6, 3, not_client, any_osinfo)
+      else if pathelem "w10" || pathelem "win10" then
+        (10, 0, is_client, ((=) "win10"))
+      else if pathelem "w11" || pathelem "win11" then
+        (10, 0, is_client, ((=) "win11"))
+      else if pathelem "2k16" || pathelem "win2016" then
+        (10, 0, not_client, ((=) "win2k16"))
+      else if pathelem "2k19" || pathelem "win2019" then
+        (10, 0, not_client, ((=) "win2k19"))
+      else if pathelem "2k22" || pathelem "win2022" then
+        (10, 0, not_client, ((=) "win2k22"))
+      else
+        raise Not_found in
+
+    arch = p_arch && os_major = p_os_major && os_minor = p_os_minor &&
+    match_os_variant os_variant &&
+    match_osinfo osinfo
+
+  with Not_found -> false
+
+(* Given a path of a file relative to the root of the directory tree
+ * with virtio-win drivers, figure out if it's suitable for the
+ * specific Windows flavor of the current guest.
+ *)
+and virtio_iso_path_matches_qemu_ga t path =
+  (* Lowercased path, since the ISO may contain upper or lowercase path
+   * elements.
+   *)
+  let lc_name = String.lowercase_ascii (Filename.basename path) in
+  match t.i_arch, lc_name with
+  | ("i386", "qemu-ga-x86.msi")
+  | ("i386", "qemu-ga-i386.msi")
+  | ("i386", "rhev-qga.msi")
+  | ("x86_64", "qemu-ga-x64.msi")
+  | ("x86_64", "qemu-ga-x86_64.msi")
+  | ("x86_64", "rhev-qga64.msi") -> true
+  | _ -> false
+
+(* Look up in libosinfo for the OS, and copy all the locally
+ * available files specified as drivers for that OS to the [destdir].
+ *
+ * This function does nothing in case either:
+ * - the osinfo short ID is not found in the libosinfo DB
+ * - the OS does not have any driver for the architecture of the guest
+ * - the location of the drivers is not a local directory
+ *
+ * Files that do not exist are silently skipped.
+ *
+ * Returns list of copied files.
+ *)
+and copy_from_libosinfo { g; i_osinfo; i_arch } destdir =
+  try
+    let os = Libosinfo_utils.get_os_by_short_id i_osinfo in
+    let drivers = os#get_device_drivers () in
+    let driver = Libosinfo_utils.best_driver drivers i_arch in
+    let uri = Xml.parse_uri driver.Libosinfo.location in
+    let basedir =
+      match uri.Xml.uri_path with
+      | Some p -> p
+      | None -> assert false in
+    List.filter_map (
+      fun f ->
+        let source = basedir // f in
+        if not (Sys.file_exists source) then
+          None
+        else (
+          let target_name = String.lowercase_ascii (Filename.basename f) in
+          let target = destdir ^ "/" ^ target_name in
+          debug "windows: copying guest tools bits (via libosinfo): 'host:%s' -> '%s'"
+                source target;
+
+          g#write target (read_whole_file source);
+          Some target_name
+        )
+    ) driver.Libosinfo.files
+  with Not_found -> []
+
+and configure_qemu_ga t files =
+  List.iter (
+    fun msi_path ->
+      (* Windows is a trashfire.
+       * https://stackoverflow.com/a/18730884
+       * https://bugzilla.redhat.com/show_bug.cgi?id=1895323
+       *)
+      let psh_script = ref [] in
+      let add = List.push_back psh_script in
+
+      add "# Uncomment this line for lots of debug output.";
+      add "# Set-PSDebug -Trace 2";
+      add "";
+      add "Write-Host Removing any previously scheduled qemu-ga installation";
+      add "schtasks.exe /Delete /TN Firstboot-qemu-ga /F";
+      add "";
+      add (sprintf
+             "Write-Host Scheduling delayed installation of qemu-ga from %s"
+             msi_path);
+      add "$d = (get-date).AddSeconds(120)";
+      add "$dtfinfo = [System.Globalization.DateTimeFormatInfo]::CurrentInfo";
+      add "$sdp = $dtfinfo.ShortDatePattern";
+      add "$sdp = $sdp -replace 'y+', 'yyyy'";
+      add "$sdp = $sdp -replace 'M+', 'MM'";
+      add "$sdp = $sdp -replace 'd+', 'dd'";
+      add "schtasks.exe /Create /SC ONCE `";
+      add "  /ST $d.ToString('HH:mm') /SD $d.ToString($sdp) `";
+      add "  /RU SYSTEM /TN Firstboot-qemu-ga `";
+      add (sprintf "  /TR \"C:\\%s /forcerestart /qn /l+*vx C:\\%s.log\""
+             msi_path msi_path);
+
+      Firstboot.add_firstboot_powershell t.g t.root
+        (sprintf "install-%s.ps1" msi_path) !psh_script;
+  ) files
diff --git a/common/mlcustomize/inject_virtio_win.mli b/common/mlcustomize/inject_virtio_win.mli
new file mode 100644 (file)
index 0000000..0ced02e
--- /dev/null
@@ -0,0 +1,85 @@
+(* virt-v2v
+ * Copyright (C) 2009-2023 Red Hat Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *)
+
+(** Values and functions for installing Windows virtio drivers. *)
+
+type t (** Handle *)
+
+type block_type = Virtio_blk | IDE
+and net_type = Virtio_net | E1000 | RTL8139
+and machine_type = I440FX | Q35 | Virt
+
+type virtio_win_installed = {
+  block_driver : block_type;
+  net_driver : net_type;
+  virtio_rng : bool;
+  virtio_balloon : bool;
+  isa_pvpanic : bool;
+  virtio_socket : bool;
+  machine : machine_type;
+  virtio_1_0 : bool;
+}
+(** After calling {!install_drivers}, this describes what virtio-win
+    drivers we were able to install (and hence, what the guest requires).
+    eg. if [virtio_rng] is true then we installed the virtio RNG
+    device, otherwise we didn't. *)
+
+val from_path : Guestfs.guestfs -> string -> string -> t
+(** Create a new virtio-win handle.  The parameters are [g root path].
+
+    The [path] should point to either the virtio-win ISO
+    (eg. F</usr/share/virtio-win/virtio-win.iso>) or the unpacked
+    directory (eg. F</usr/share/virtio-win>).
+
+    The libosinfo database is ignored if you use this method. *)
+
+val from_libosinfo : Guestfs.guestfs -> string -> t
+(** Create a new virtio-win handle.  The parameters are [g root].
+
+    The libosinfo database will be used as the source for drivers.
+    The virtio-win ISO or unpacked directory is ignored if you use
+    this method. *)
+
+val from_environment : Guestfs.guestfs -> string -> string -> t
+(** Using the [VIRTIO_WIN] environment variable (if present), set up
+    the injection handle.
+
+    The parameters are: [g root datadir].  The [datadir] is the path
+    from ./configure (eg. {!Config.datadir}).
+
+    This should only be used by [virt-v2v] and is considered a legacy method. *)
+
+val inject_virtio_win_drivers : t -> Registry.t -> virtio_win_installed
+(** [inject_virtio_win_drivers t reg]
+    installs virtio drivers from the driver directory or driver
+    ISO into the guest driver directory and updates the registry
+    so that the [viostor.sys] driver gets loaded by Windows at boot.
+
+    [reg] is the system hive which is open for writes when this
+    function is called.
+
+    This returns a {!virtio_win_installed} struct reflecting what devices
+    are now required by the guest, either virtio devices if we managed to
+    install those, or legacy devices if we didn't. *)
+
+val inject_qemu_ga : t -> bool
+(** Inject MSIs (ideally just one) with QEMU Guest Agent into a Windows
+    guest.  A firstboot script is also injected which should install
+    the MSI(s).
+
+    Returns [true] iff we were able to inject qemu-ga. *)
index b906997515db3585d9ef7a3265004747bd58c774..24c67f3e133983268b058ad031c3760b91265d87 100755 (executable)
@@ -61,9 +61,6 @@ case "$guestname" in
         extra[${#extra[*]}]='/etc/inittab:
                                 s,^#([1-9].*respawn.*/sbin/getty.*),$1,'
         ;;
-    fedora*|rhel*|centos*)
-        extra[${#extra[*]}]='--selinux-relabel'
-        ;;
     *)
         ;;
 esac
index 86278c63b20088901a4eb5f0936c423d613498ba..caf75211346a638059ae6ce3523c13c5cbba9cb0 100755 (executable)
@@ -41,13 +41,12 @@ virt-builder "$guestname" --quiet -o "$disk"
 # Test #1: relabel with the default configuration works.
 rm -f  "$disk_overlay"
 guestfish -- disk-create "$disk_overlay" qcow2 -1 backingfile:"$disk"
-virt-customize -a "$disk" --selinux-relabel
+virt-customize -a "$disk"
 
 # Test #2: relabel with no SELINUXTYPE in the configuration.
 rm -f  "$disk_overlay"
 guestfish -- disk-create "$disk_overlay" qcow2 -1 backingfile:"$disk"
 virt-customize -a "$disk" \
-  --edit /etc/selinux/config:"s,^SELINUXTYPE=,#&,g" \
-  --selinux-relabel
+  --edit /etc/selinux/config:"s,^SELINUXTYPE=,#&,g"
 
 rm "$disk" "$disk_overlay"
diff --git a/common/mldrivers/Makefile.am b/common/mldrivers/Makefile.am
new file mode 100644 (file)
index 0000000..8fb979e
--- /dev/null
@@ -0,0 +1,102 @@
+# Common code for driver detection used by virt-drivers and virt-v2v
+# Copyright (C) 2011-2023 Red Hat Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+include $(top_srcdir)/subdir-rules.mk
+
+EXTRA_DIST = \
+       $(SOURCES_MLI) \
+       $(SOURCES_ML) \
+       $(SOURCES_C)
+
+SOURCES_MLI = \
+       firmware.mli \
+       linux.mli \
+       linux_bootloaders.mli \
+       linux_kernels.mli \
+       windows_drivers.mli
+
+SOURCES_ML = \
+       firmware.ml \
+       linux.ml \
+       linux_bootloaders.ml \
+       linux_kernels.ml \
+       windows_drivers.ml
+
+SOURCES_C = \
+       dummy.c
+
+# We pretend that we're building a C library.  automake handles the
+# compilation of the C sources for us.  At the end we take the C
+# objects and OCaml objects and link them into the OCaml library.
+# This C library is never used.
+
+noinst_LIBRARIES = libmldrivers.a
+
+if !HAVE_OCAMLOPT
+MLDRIVERS_CMA = mldrivers.cma
+else
+MLDRIVERS_CMA = mldrivers.cmxa
+endif
+
+noinst_DATA = $(MLDRIVERS_CMA)
+
+libmldrivers_a_SOURCES = $(SOURCES_C)
+libmldrivers_a_CPPFLAGS = \
+       -DCAML_NAME_SPACE \
+       -I. \
+       -I$(top_builddir) \
+       -I$(shell $(OCAMLC) -where) \
+       -I$(top_srcdir)/common/mlgettext \
+       -I$(top_srcdir)/common/mlpcre \
+       -I$(top_srcdir)/common/mlstdutils \
+       -I$(top_srcdir)/common/mltools
+libmldrivers_a_CFLAGS = \
+       $(WARN_CFLAGS) $(WERROR_CFLAGS) \
+       -fPIC
+
+BOBJECTS = $(SOURCES_ML:.ml=.cmo)
+XOBJECTS = $(BOBJECTS:.cmo=.cmx)
+
+OCAMLPACKAGES = \
+       -package str,unix,guestfs \
+       -I $(top_builddir)/common/mlgettext \
+       -I $(top_builddir)/common/mlpcre \
+       -I $(top_builddir)/common/mlstdutils \
+       -I $(top_builddir)/common/mltools \
+       -I $(builddir)
+OCAMLPACKAGES_TESTS = $(MLDRIVERS_CMA)
+
+OCAMLFLAGS = $(OCAML_FLAGS) $(OCAML_WARN_ERROR) -ccopt '$(CFLAGS)'
+
+if !HAVE_OCAMLOPT
+OBJECTS = $(BOBJECTS)
+else
+OBJECTS = $(XOBJECTS)
+endif
+
+libmldrivers_a_DEPENDENCIES = $(OBJECTS)
+
+$(MLDRIVERS_CMA): $(OBJECTS) libmldrivers.a
+       $(OCAMLFIND) mklib $(OCAMLPACKAGES) \
+           $(OBJECTS) $(libmldrivers_a_OBJECTS) -o mldrivers
+
+# OCaml dependencies.
+.depend: $(srcdir)/*.mli $(srcdir)/*.ml
+       $(top_builddir)/ocaml-dep.sh $^
+-include .depend
+
+.PHONY: docs
diff --git a/common/mldrivers/Makefile.in b/common/mldrivers/Makefile.in
new file mode 100644 (file)
index 0000000..b59abfc
--- /dev/null
@@ -0,0 +1,956 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# Common code for driver detection used by virt-drivers and virt-v2v
+# Copyright (C) 2011-2023 Red Hat Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+# libguestfs
+# Copyright (C) 2009-2023 Red Hat Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+# subdir-rules.mk should be included in every *subdirectory* Makefile.am.
+
+# libguestfs
+# Copyright (C) 2013 Red Hat Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+# 'common-rules.mk' should be included in every Makefile.am.
+# cf. 'subdir-rules.mk'
+
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = common/mldrivers
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
+       $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+       $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+       $(top_srcdir)/m4/ocaml.m4 $(top_srcdir)/m4/guestfs-progs.m4 \
+       $(top_srcdir)/m4/guestfs-c.m4 \
+       $(top_srcdir)/m4/guestfs-libraries.m4 \
+       $(top_srcdir)/m4/guestfs-ocaml-gettext.m4 \
+       $(top_srcdir)/m4/guestfs-ocaml.m4 \
+       $(top_srcdir)/m4/guestfs-perl.m4 \
+       $(top_srcdir)/m4/guestfs-misc-libraries.m4 \
+       $(top_srcdir)/m4/guestfs-bash-completion.m4 \
+       $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LIBRARIES = $(noinst_LIBRARIES)
+ARFLAGS = cru
+AM_V_AR = $(am__v_AR_@AM_V@)
+am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@)
+am__v_AR_0 = @echo "  AR      " $@;
+am__v_AR_1 = 
+libmldrivers_a_AR = $(AR) $(ARFLAGS)
+libmldrivers_a_LIBADD =
+am__objects_1 = libmldrivers_a-dummy.$(OBJEXT)
+am_libmldrivers_a_OBJECTS = $(am__objects_1)
+libmldrivers_a_OBJECTS = $(am_libmldrivers_a_OBJECTS)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/libmldrivers_a-dummy.Po
+am__mv = mv -f
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+       $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+       $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+       $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = $(libmldrivers_a_SOURCES)
+DIST_SOURCES = $(libmldrivers_a_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+DATA = $(noinst_DATA)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+       $(top_srcdir)/build-aux/depcomp $(top_srcdir)/common-rules.mk \
+       $(top_srcdir)/subdir-rules.mk
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BASH_COMPLETIONS_DIR = @BASH_COMPLETIONS_DIR@
+BASH_COMPLETION_CFLAGS = @BASH_COMPLETION_CFLAGS@
+BASH_COMPLETION_LIBS = @BASH_COMPLETION_LIBS@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GCC_VISIBILITY_HIDDEN = @GCC_VISIBILITY_HIDDEN@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+JANSSON_CFLAGS = @JANSSON_CFLAGS@
+JANSSON_LIBS = @JANSSON_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBCRYPT_CFLAGS = @LIBCRYPT_CFLAGS@
+LIBCRYPT_LIBS = @LIBCRYPT_LIBS@
+LIBGUESTFS_CFLAGS = @LIBGUESTFS_CFLAGS@
+LIBGUESTFS_LIBS = @LIBGUESTFS_LIBS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBLZMA_CFLAGS = @LIBLZMA_CFLAGS@
+LIBLZMA_LIBS = @LIBLZMA_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBOSINFO_CFLAGS = @LIBOSINFO_CFLAGS@
+LIBOSINFO_LIBS = @LIBOSINFO_LIBS@
+LIBS = @LIBS@
+LIBTINFO_CFLAGS = @LIBTINFO_CFLAGS@
+LIBTINFO_LIBS = @LIBTINFO_LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVIRT_CFLAGS = @LIBVIRT_CFLAGS@
+LIBVIRT_LIBS = @LIBVIRT_LIBS@
+LIBXML2_CFLAGS = @LIBXML2_CFLAGS@
+LIBXML2_LIBS = @LIBXML2_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MKISOFS = @MKISOFS@
+MSGCAT = @MSGCAT@
+MSGFMT = @MSGFMT@
+MSGMERGE = @MSGMERGE@
+MSGMERGE_FOR_MSGFMT_OPTION = @MSGMERGE_FOR_MSGFMT_OPTION@
+NCURSES_CONFIG = @NCURSES_CONFIG@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OCAMLBEST = @OCAMLBEST@
+OCAMLBUILD = @OCAMLBUILD@
+OCAMLC = @OCAMLC@
+OCAMLCDOTOPT = @OCAMLCDOTOPT@
+OCAMLDEP = @OCAMLDEP@
+OCAMLDOC = @OCAMLDOC@
+OCAMLFIND = @OCAMLFIND@
+OCAMLLIB = @OCAMLLIB@
+OCAMLMKLIB = @OCAMLMKLIB@
+OCAMLMKTOP = @OCAMLMKTOP@
+OCAMLOPT = @OCAMLOPT@
+OCAMLOPTDOTOPT = @OCAMLOPTDOTOPT@
+OCAMLVERSION = @OCAMLVERSION@
+OCAML_FLAGS = @OCAML_FLAGS@
+OCAML_GETTEXT = @OCAML_GETTEXT@
+OCAML_PKG_gettext = @OCAML_PKG_gettext@
+OCAML_PKG_guestfs = @OCAML_PKG_guestfs@
+OCAML_PKG_ounit2 = @OCAML_PKG_ounit2@
+OCAML_RUNTIME_VARIANT_PIC_OPTION = @OCAML_RUNTIME_VARIANT_PIC_OPTION@
+OCAML_WARN_ERROR = @OCAML_WARN_ERROR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_FULL = @PACKAGE_VERSION_FULL@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE2_CFLAGS = @PCRE2_CFLAGS@
+PCRE2_CONFIG = @PCRE2_CONFIG@
+PCRE2_LIBS = @PCRE2_LIBS@
+PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+PO4A_GETTEXTIZE = @PO4A_GETTEXTIZE@
+PO4A_TRANSLATE = @PO4A_TRANSLATE@
+PODWRAPPER = @PODWRAPPER@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+REALPATH = @REALPATH@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SQLITE3 = @SQLITE3@
+STRIP = @STRIP@
+SYSCONFDIR = @SYSCONFDIR@
+USE_NLS = @USE_NLS@
+VALGRIND = @VALGRIND@
+VERSION = @VERSION@
+VERSION_SCRIPT_FLAGS = @VERSION_SCRIPT_FLAGS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLLINT = @XMLLINT@
+XZCAT = @XZCAT@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+libvirt_ro_uri = @libvirt_ro_uri@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+ounit_is_v2 = @ounit_is_v2@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+# Files that should universally be removed by 'make clean'.  Note if
+# there is any case in any subdirectory where a file should not be
+# removed by 'make clean', it should not be listed here!
+
+# Editor backup files
+
+# Patch original and reject files.
+
+# OCaml intermediate and generated files.
+
+# OCaml -annot files (used for displaying types in some IDEs).
+
+# OCaml oUnit generated files.
+
+# Manual pages - these are all generated from *.pod, so the
+# pages themselves should all be removed by 'make clean'.
+
+# Stamp files used when generating man pages.
+
+# Bindtests temporary files used in many language bindings.
+CLEANFILES = *~ *.bak *.orig *.rej *.cmi *.cmo *.cma *.cmx *.cmxa \
+       dll*.so *.a *.annot oUnit-*.cache oUnit-*.log *.1 *.3 *.5 *.8 \
+       stamp-*.pod bindtests.tmp
+
+# Files that should be universally removed by 'make distclean'.
+DISTCLEANFILES = .depend stamp-*
+
+# Special suffixes used by OCaml.
+
+# Special suffixes used by PO files.
+SUFFIXES = .cmo .cmi .cmx .ml .mli .mll .mly .po .gmo
+LOG_DRIVER = env $(SHELL) $(top_srcdir)/build-aux/guestfs-test-driver
+
+# Rules for building OCaml objects.
+# See also:
+# guestfs-hacking(1) section "HOW OCAML PROGRAMS ARE COMPILED AND LINKED"
+@HAVE_OCAMLOPT_FALSE@MLARCHIVE = cma
+@HAVE_OCAMLOPT_TRUE@MLARCHIVE = cmxa
+@HAVE_OCAMLOPT_FALSE@LINK_CUSTOM_OCAMLC_ONLY = -custom
+@HAVE_OCAMLOPT_FALSE@BEST = c
+@HAVE_OCAMLOPT_TRUE@BEST = opt
+
+# custom silent rules
+guestfs_am_v_ocamlc = $(guestfs_am_v_ocamlc_@AM_V@)
+guestfs_am_v_ocamlc_ = $(guestfs_am_v_ocamlc_@AM_DEFAULT_V@)
+guestfs_am_v_ocamlc_0 = @echo "  OCAMLC  " $@;
+guestfs_am_v_ocamlcmi = $(guestfs_am_v_ocamlcmi_@AM_V@)
+guestfs_am_v_ocamlcmi_ = $(guestfs_am_v_ocamlcmi_@AM_DEFAULT_V@)
+guestfs_am_v_ocamlcmi_0 = @echo "  OCAMLCMI" $@;
+guestfs_am_v_ocamlopt = $(guestfs_am_v_ocamlopt_@AM_V@)
+guestfs_am_v_ocamlopt_ = $(guestfs_am_v_ocamlopt_@AM_DEFAULT_V@)
+guestfs_am_v_ocamlopt_0 = @echo "  OCAMLOPT" $@;
+guestfs_am_v_javac = $(guestfs_am_v_javac_@AM_V@)
+guestfs_am_v_javac_ = $(guestfs_am_v_javac_@AM_DEFAULT_V@)
+guestfs_am_v_javac_0 = @echo "  JAVAC   " $@;
+guestfs_am_v_erlc = $(guestfs_am_v_erlc_@AM_V@)
+guestfs_am_v_erlc_ = $(guestfs_am_v_erlc_@AM_DEFAULT_V@)
+guestfs_am_v_erlc_0 = @echo "  ERLC    " $@;
+guestfs_am_v_podwrapper = $(guestfs_am_v_podwrapper_@AM_V@)
+guestfs_am_v_podwrapper_ = $(guestfs_am_v_podwrapper_@AM_DEFAULT_V@)
+guestfs_am_v_podwrapper_0 = @echo "  POD     " $@;
+guestfs_am_v_jar = $(guestfs_am_v_jar_@AM_V@)
+guestfs_am_v_jar_ = $(guestfs_am_v_jar_@AM_DEFAULT_V@)
+guestfs_am_v_jar_0 = @echo "  JAR     " $@;
+guestfs_am_v_po4a_translate = $(guestfs_am_v_po4a_translate_@AM_V@)
+guestfs_am_v_po4a_translate_ = $(guestfs_am_v_po4a_translate_@AM_DEFAULT_V@)
+guestfs_am_v_po4a_translate_0 = @echo "  PO4A-T  " $@;
+EXTRA_DIST = \
+       $(SOURCES_MLI) \
+       $(SOURCES_ML) \
+       $(SOURCES_C)
+
+SOURCES_MLI = \
+       firmware.mli \
+       linux.mli \
+       linux_bootloaders.mli \
+       linux_kernels.mli \
+       windows_drivers.mli
+
+SOURCES_ML = \
+       firmware.ml \
+       linux.ml \
+       linux_bootloaders.ml \
+       linux_kernels.ml \
+       windows_drivers.ml
+
+SOURCES_C = \
+       dummy.c
+
+
+# We pretend that we're building a C library.  automake handles the
+# compilation of the C sources for us.  At the end we take the C
+# objects and OCaml objects and link them into the OCaml library.
+# This C library is never used.
+noinst_LIBRARIES = libmldrivers.a
+@HAVE_OCAMLOPT_FALSE@MLDRIVERS_CMA = mldrivers.cma
+@HAVE_OCAMLOPT_TRUE@MLDRIVERS_CMA = mldrivers.cmxa
+noinst_DATA = $(MLDRIVERS_CMA)
+libmldrivers_a_SOURCES = $(SOURCES_C)
+libmldrivers_a_CPPFLAGS = \
+       -DCAML_NAME_SPACE \
+       -I. \
+       -I$(top_builddir) \
+       -I$(shell $(OCAMLC) -where) \
+       -I$(top_srcdir)/common/mlgettext \
+       -I$(top_srcdir)/common/mlpcre \
+       -I$(top_srcdir)/common/mlstdutils \
+       -I$(top_srcdir)/common/mltools
+
+libmldrivers_a_CFLAGS = \
+       $(WARN_CFLAGS) $(WERROR_CFLAGS) \
+       -fPIC
+
+BOBJECTS = $(SOURCES_ML:.ml=.cmo)
+XOBJECTS = $(BOBJECTS:.cmo=.cmx)
+OCAMLPACKAGES = \
+       -package str,unix,guestfs \
+       -I $(top_builddir)/common/mlgettext \
+       -I $(top_builddir)/common/mlpcre \
+       -I $(top_builddir)/common/mlstdutils \
+       -I $(top_builddir)/common/mltools \
+       -I $(builddir)
+
+OCAMLPACKAGES_TESTS = $(MLDRIVERS_CMA)
+OCAMLFLAGS = $(OCAML_FLAGS) $(OCAML_WARN_ERROR) -ccopt '$(CFLAGS)'
+@HAVE_OCAMLOPT_FALSE@OBJECTS = $(BOBJECTS)
+@HAVE_OCAMLOPT_TRUE@OBJECTS = $(XOBJECTS)
+libmldrivers_a_DEPENDENCIES = $(OBJECTS)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .cmo .cmi .cmx .ml .mli .mll .mly .po .gmo .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(top_srcdir)/subdir-rules.mk $(top_srcdir)/common-rules.mk $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign common/mldrivers/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --foreign common/mldrivers/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+       esac;
+$(top_srcdir)/subdir-rules.mk $(top_srcdir)/common-rules.mk $(am__empty):
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLIBRARIES:
+       -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
+
+libmldrivers.a: $(libmldrivers_a_OBJECTS) $(libmldrivers_a_DEPENDENCIES) $(EXTRA_libmldrivers_a_DEPENDENCIES) 
+       $(AM_V_at)-rm -f libmldrivers.a
+       $(AM_V_AR)$(libmldrivers_a_AR) libmldrivers.a $(libmldrivers_a_OBJECTS) $(libmldrivers_a_LIBADD)
+       $(AM_V_at)$(RANLIB) libmldrivers.a
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmldrivers_a-dummy.Po@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+       @$(MKDIR_P) $(@D)
+       @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@   $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@   $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+@am__fastdepCC_TRUE@   $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
+@am__fastdepCC_TRUE@   $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@   $(am__mv) $$depbase.Tpo $$depbase.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+libmldrivers_a-dummy.o: dummy.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmldrivers_a_CPPFLAGS) $(CPPFLAGS) $(libmldrivers_a_CFLAGS) $(CFLAGS) -MT libmldrivers_a-dummy.o -MD -MP -MF $(DEPDIR)/libmldrivers_a-dummy.Tpo -c -o libmldrivers_a-dummy.o `test -f 'dummy.c' || echo '$(srcdir)/'`dummy.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libmldrivers_a-dummy.Tpo $(DEPDIR)/libmldrivers_a-dummy.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='dummy.c' object='libmldrivers_a-dummy.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmldrivers_a_CPPFLAGS) $(CPPFLAGS) $(libmldrivers_a_CFLAGS) $(CFLAGS) -c -o libmldrivers_a-dummy.o `test -f 'dummy.c' || echo '$(srcdir)/'`dummy.c
+
+libmldrivers_a-dummy.obj: dummy.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmldrivers_a_CPPFLAGS) $(CPPFLAGS) $(libmldrivers_a_CFLAGS) $(CFLAGS) -MT libmldrivers_a-dummy.obj -MD -MP -MF $(DEPDIR)/libmldrivers_a-dummy.Tpo -c -o libmldrivers_a-dummy.obj `if test -f 'dummy.c'; then $(CYGPATH_W) 'dummy.c'; else $(CYGPATH_W) '$(srcdir)/dummy.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libmldrivers_a-dummy.Tpo $(DEPDIR)/libmldrivers_a-dummy.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='dummy.c' object='libmldrivers_a-dummy.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmldrivers_a_CPPFLAGS) $(CPPFLAGS) $(libmldrivers_a_CFLAGS) $(CFLAGS) -c -o libmldrivers_a-dummy.obj `if test -f 'dummy.c'; then $(CYGPATH_W) 'dummy.c'; else $(CYGPATH_W) '$(srcdir)/dummy.c'; fi`
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+       $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       set x; \
+       here=`pwd`; \
+       $(am__define_uniq_tagged_files); \
+       shift; \
+       if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         if test $$# -gt 0; then \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             "$$@" $$unique; \
+         else \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             $$unique; \
+         fi; \
+       fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       $(am__define_uniq_tagged_files); \
+       test -z "$(CTAGS_ARGS)$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && $(am__cd) $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+       list='$(am__tagged_files)'; \
+       case "$(srcdir)" in \
+         [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+         *) sdir=$(subdir)/$(srcdir) ;; \
+       esac; \
+       for i in $$list; do \
+         if test -f "$$i"; then \
+           echo "$(subdir)/$$i"; \
+         else \
+           echo "$$sdir/$$i"; \
+         fi; \
+       done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+distdir: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d "$(distdir)/$$file"; then \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+         else \
+           test -f "$(distdir)/$$file" \
+           || cp -p $$d/$$file "$(distdir)/$$file" \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LIBRARIES) $(DATA)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       if test -z '$(STRIP)'; then \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+             install; \
+       else \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+           "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+       fi
+mostlyclean-generic:
+
+clean-generic:
+       -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+       -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \
+       mostlyclean-am
+
+distclean: distclean-am
+               -rm -f ./$(DEPDIR)/libmldrivers_a-dummy.Po
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+               -rm -f ./$(DEPDIR)/libmldrivers_a-dummy.Po
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+       clean-generic clean-libtool clean-noinstLIBRARIES \
+       cscopelist-am ctags ctags-am distclean distclean-compile \
+       distclean-generic distclean-libtool distclean-tags distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-data install-data-am install-dvi install-dvi-am \
+       install-exec install-exec-am install-html install-html-am \
+       install-info install-info-am install-man install-pdf \
+       install-pdf-am install-ps install-ps-am install-strip \
+       installcheck installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+       tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+-include $(top_builddir)/localenv
+
+# Individual Makefile.am's should define generator_built if that
+# subdirectory contains any files which are built by the generator.
+# Set generator_built to the list of those files.
+
+$(generator_built): $(top_builddir)/generator/stamp-generator
+
+$(top_builddir)/generator/stamp-generator: $(top_builddir)/generator/generator
+       @if test -f $(top_builddir)/generator/Makefile; then \
+         $(MAKE) -C $(top_builddir)/generator stamp-generator; \
+       else \
+         echo "warning: Run 'make' at the top level to build $(generator_built)"; \
+       fi
+
+# If this file doesn't exist, just print a warning and continue.
+# During 'make distclean' we can end up deleting this file.
+$(top_builddir)/generator/generator:
+       @if test -f $(top_builddir)/generator/Makefile; then \
+         $(MAKE) -C $(top_builddir)/generator generator; \
+       else \
+         echo "warning: Run 'make' at the top level to build $@"; \
+       fi
+
+%.cmi: %.mli
+       $(guestfs_am_v_ocamlcmi)$(OCAMLFIND) ocamlc $(OCAMLFLAGS) $(OCAMLPACKAGES) -c $< -o $@
+%.cmo: %.ml
+       $(guestfs_am_v_ocamlc)$(OCAMLFIND) ocamlc $(OCAMLFLAGS) $(OCAMLPACKAGES) -c $< -o $@
+@HAVE_OCAMLOPT_TRUE@%.cmx: %.ml
+@HAVE_OCAMLOPT_TRUE@   $(guestfs_am_v_ocamlopt)$(OCAMLFIND) ocamlopt $(OCAMLFLAGS) $(OCAMLPACKAGES) -c $< -o $@
+
+# Test shell scripts should use '$TEST_FUNCTIONS' to get a predefined
+# set of helper functions for running tests (see test-functions.sh).
+#
+# Notes:
+#
+# (1) This is in fact a single command all on one line.  The variables
+# are evaluated in test-functions.sh.
+#
+# (2) We use absolute paths here and in test-functions.sh so that the
+# test can change directory freely.  But we also include the
+# non-absolute values so they can be used by the test script itself.
+export TEST_FUNCTIONS := \
+       source $(abs_top_srcdir)/test-functions.sh \
+       abs_srcdir="$(abs_srcdir)" \
+       abs_builddir="$(abs_builddir)" \
+       top_srcdir="$(top_srcdir)" \
+       top_builddir="$(top_builddir)" \
+       abs_top_srcdir="$(abs_top_srcdir)" \
+       abs_top_builddir="$(abs_top_builddir)"
+
+$(MLDRIVERS_CMA): $(OBJECTS) libmldrivers.a
+       $(OCAMLFIND) mklib $(OCAMLPACKAGES) \
+           $(OBJECTS) $(libmldrivers_a_OBJECTS) -o mldrivers
+
+# OCaml dependencies.
+.depend: $(srcdir)/*.mli $(srcdir)/*.ml
+       $(top_builddir)/ocaml-dep.sh $^
+-include .depend
+
+.PHONY: docs
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/common/mldrivers/dummy.c b/common/mldrivers/dummy.c
new file mode 100644 (file)
index 0000000..ebab619
--- /dev/null
@@ -0,0 +1,2 @@
+/* Dummy source, to be used for OCaml-based tools with no C sources. */
+enum { foo = 1 };
diff --git a/common/mldrivers/firmware.ml b/common/mldrivers/firmware.ml
new file mode 100644 (file)
index 0000000..c77a879
--- /dev/null
@@ -0,0 +1,62 @@
+(* virt-v2v
+ * Copyright (C) 2009-2023 Red Hat Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *)
+
+open Printf
+
+open Tools_utils
+
+module G = Guestfs
+
+type i_firmware =
+  | I_BIOS
+  | I_UEFI of string list
+
+let detect_firmware g =
+  let parttype_is_gpt dev =
+    try g#part_get_parttype dev = "gpt"
+    with G.Error msg as exn ->
+         (* If it's _not_ "unrecognised disk label" then re-raise it. *)
+         if g#last_errno () <> G.Errno.errno_EINVAL then raise exn;
+         debug "%s (ignored)" msg;
+         false
+  in
+  let accumulate_partition (esp_parts, bboot) part =
+    let dev = g#part_to_dev part in
+    if parttype_is_gpt dev then
+      let partnum = g#part_to_partnum part in
+      let part_type_guid = g#part_get_gpt_type dev partnum in
+      match part_type_guid with
+      (* EFI system partition *)
+      | "C12A7328-F81F-11D2-BA4B-00A0C93EC93B" -> part :: esp_parts, bboot
+      (* BIOS boot partition *)
+      | "21686148-6449-6E6F-744E-656564454649" -> esp_parts, true
+      | _ -> esp_parts, bboot
+    else esp_parts, bboot
+  in
+
+  let esp_partitions, bios_boot =
+    Array.fold_left accumulate_partition ([], false) (g#list_partitions ()) in
+
+  (* If there's a BIOS boot partition present (0xef02 type for gdisk,
+   * "bios_grub" flag for parted), then this is likely a BIOS+GPT setup.
+   * In this case we prioritize BIOS boot partition and detect BIOS firmware,
+   * no matter how many ESPs we've found.
+   *)
+  match esp_partitions, bios_boot with
+  | _ :: _, false -> I_UEFI esp_partitions
+  | _ -> I_BIOS
diff --git a/common/mldrivers/firmware.mli b/common/mldrivers/firmware.mli
new file mode 100644 (file)
index 0000000..176faa8
--- /dev/null
@@ -0,0 +1,35 @@
+(* virt-v2v
+ * Copyright (C) 2009-2023 Red Hat Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *)
+
+type i_firmware =
+  | I_BIOS
+  | I_UEFI of string list
+(** Firmware type returned through inspection (as opposed to source
+    hypervisor information which could be different or missing). *)
+
+val detect_firmware : Guestfs.guestfs -> i_firmware
+(** [detect_firmware g] sees if this guest could use UEFI to boot.  It
+    should use GPT and it should have an EFI System Partition (ESP).
+
+    If the guest has BIOS boot partition present, this is likely a BIOS+GPT
+    setup, so [I_BIOS] is returned.
+
+    If it has ESP(s), then [I_UEFI devs] is returned where [devs] is the
+    list of at least one ESP.
+
+    Otherwise, [I_BIOS] is returned. *)
diff --git a/common/mldrivers/linux.ml b/common/mldrivers/linux.ml
new file mode 100644 (file)
index 0000000..4e30a8e
--- /dev/null
@@ -0,0 +1,181 @@
+(* virt-v2v
+ * Copyright (C) 2009-2023 Red Hat Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *)
+
+open Printf
+
+open Std_utils
+open Tools_utils
+open Common_gettext.Gettext
+
+module G = Guestfs
+
+let re_version = PCRE.compile "(\\d+)\\.(\\d+)"
+
+let augeas_reload g =
+  g#aug_load ();
+  debug_augeas_errors g
+
+let rec remove g root packages =
+  if packages <> [] then (
+    do_remove g root packages;
+    (* Reload Augeas in case anything changed. *)
+    augeas_reload g
+  )
+
+and do_remove g root packages =
+  assert (List.length packages > 0);
+
+  let package_format = g#inspect_get_package_format root in
+  match package_format with
+  | "deb" ->
+    let cmd = [ "dpkg"; "--purge" ] @ packages in
+    let cmd = Array.of_list cmd in
+    ignore (g#command cmd);
+
+  | "rpm" ->
+    let cmd = [ "rpm"; "-e"; "--allmatches" ] @ packages in
+    let cmd = Array.of_list cmd in
+    ignore (g#command cmd)
+
+  | format ->
+    error (f_"don’t know how to remove packages using %s: packages: %s")
+      format (String.concat " " packages)
+
+let file_list_of_package (g : Guestfs.guestfs) root app =
+  let package_format = g#inspect_get_package_format root in
+  match package_format with
+  | "deb" ->
+    let cmd = [| "dpkg"; "-L"; app.G.app2_name |] in
+    debug "%s" (String.concat " " (Array.to_list cmd));
+    let files = g#command_lines cmd in
+    let files = Array.to_list files in
+    List.sort compare files
+
+  | "rpm" ->
+    (* Since RPM allows multiple packages installed with the same
+     * name, always check the full NEVR here (RHBZ#1161250).
+     *
+     * In RPM < 4.11 query commands that use the epoch number in the
+     * package name did not work.
+     *
+     * For example:
+     * RHEL 6 (rpm 4.8.0):
+     *   $ rpm -q tar-2:1.23-11.el6.x86_64
+     *   package tar-2:1.23-11.el6.x86_64 is not installed
+     * Fedora 20 (rpm 4.11.2):
+     *   $ rpm -q tar-2:1.26-30.fc20.x86_64
+     *   tar-1.26-30.fc20.x86_64
+     *)
+    let is_rpm_lt_4_11 () =
+      let ver =
+        try
+          (* Since we're going to run 'rpm' below anyway, seems safe
+           * to run it here and assume the binary works.
+           *)
+          let cmd = [| "rpm"; "--version" |] in
+          debug "%s" (String.concat " " (Array.to_list cmd));
+          let ver = g#command_lines cmd in
+          let ver = if Array.length ver > 0 then ver.(0) else raise Not_found in
+          debug "%s" ver;
+          let ver = String.nsplit " " ver in
+          let ver =
+            match ver with
+            | [ "RPM"; "version"; ver ] -> ver
+            | _ -> raise Not_found in
+          if not (PCRE.matches re_version ver) then raise Not_found;
+          (int_of_string (PCRE.sub 1), int_of_string (PCRE.sub 2))
+        with Not_found ->
+          (* 'rpm' not installed? Hmm... *)
+          (0, 0) in
+      ver < (4, 11)
+    in
+    let pkg_name =
+      if app.G.app2_epoch = Int32.zero || is_rpm_lt_4_11 () then
+        sprintf "%s-%s-%s" app.G.app2_name app.G.app2_version
+          app.G.app2_release
+      else
+        sprintf "%s-%ld:%s-%s" app.G.app2_name app.G.app2_epoch
+          app.G.app2_version app.G.app2_release in
+    let cmd = [| "rpm"; "-ql"; pkg_name |] in
+    debug "%s" (String.concat " " (Array.to_list cmd));
+    let files = g#command_lines cmd in
+    (* RPM prints "(contains no files)" on stdout when a package
+     * has no files in it:
+     * https://github.com/rpm-software-management/rpm/issues/962
+     *)
+    if files = [| "(contains no files)" |] then
+      []
+    else (
+      let files = Array.to_list files in
+      List.sort compare files
+    )
+
+  | format ->
+    error (f_"don’t know how to get list of files from package using %s")
+      format
+
+let is_file_owned (g : G.guestfs) root path =
+  let package_format = g#inspect_get_package_format root in
+  match package_format with
+  | "deb" ->
+      (* With dpkg usually the directories are owned by all the packages
+       * that install anything in them.  Also with multiarch the same
+       * package is allowed (although with different architectures).
+       * This function returns only one package in all the cases.
+       *)
+      let cmd = [| "dpkg"; "-S"; path |] in
+      debug "%s" (String.concat " " (Array.to_list cmd));
+      (try
+         let lines = g#command_lines cmd in
+         if Array.length lines = 0 then
+           error (f_"internal error: is_file_owned: dpkg command returned no output");
+         (* Just check the output looks something like "pkg: filename". *)
+         if String.find lines.(0) ": " >= 0 then
+           true
+         else
+           error (f_"internal error: is_file_owned: unexpected output from dpkg command: %s")
+                 lines.(0)
+       with Guestfs.Error msg as exn ->
+         if String.find msg "no path found matching pattern" >= 0 then
+           false
+         else
+           raise exn
+      )
+
+  | "rpm" ->
+     (* Run rpm -qf and print a magic string if the file is owned.
+      * If not owned, rpm will print "... is not owned by any package"
+      * and exit with an error.  Unfortunately the string is sent to
+      * stdout, so here we ignore the exit status of rpm and just
+      * look for one of the two strings.
+      *)
+     let magic = "FILE_OWNED_TEST" in
+     let cmd = sprintf "rpm -qf --qf %s %s 2>&1 ||:"
+                       (quote (magic ^ "\n")) (quote path) in
+     let r = g#sh cmd in
+     if String.find r magic >= 0 then true
+     else if String.find r "is not owned" >= 0 then false
+     else failwithf "RPM file owned test failed: %s" r
+
+  | format ->
+    error (f_"don’t know how to find file owner using %s") format
+
+let is_package_manager_save_file filename =
+  (* Recognized suffixes of package managers. *)
+  let suffixes = [ ".dpkg-old"; ".dpkg-new"; ".rpmsave"; ".rpmnew"; ] in
+  List.exists (Filename.check_suffix filename) suffixes
diff --git a/common/mldrivers/linux.mli b/common/mldrivers/linux.mli
new file mode 100644 (file)
index 0000000..6304287
--- /dev/null
@@ -0,0 +1,40 @@
+(* virt-v2v
+ * Copyright (C) 2009-2023 Red Hat Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *)
+
+(** Common Linux functions. *)
+
+val augeas_reload : Guestfs.guestfs -> unit
+(** Wrapper around [g#aug_load], which (if verbose) provides
+    additional debugging information about parsing problems
+    that augeas found. *)
+
+val remove : Guestfs.guestfs -> string -> string list -> unit
+(** [remove g root pkgs] uninstalls the package(s). *)
+
+val file_list_of_package : Guestfs.guestfs -> string ->
+                           Guestfs.application2 -> string list
+(** [file_list_of_package g root app] returns the list of files
+    owned by a package. *)
+
+val is_file_owned : Guestfs.guestfs -> string -> string -> bool
+(** [is_file_owned g root path] returns true if the file is owned
+    by any installed package. *)
+
+val is_package_manager_save_file : string -> bool
+(** Return true if the filename is something like [*.rpmsave], ie.
+    a package manager save-file. *)
diff --git a/common/mldrivers/linux_bootloaders.ml b/common/mldrivers/linux_bootloaders.ml
new file mode 100644 (file)
index 0000000..6f8857e
--- /dev/null
@@ -0,0 +1,406 @@
+(* virt-v2v
+ * Copyright (C) 2009-2023 Red Hat Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *)
+
+open Printf
+
+open Std_utils
+open Tools_utils
+open Common_gettext.Gettext
+
+module G = Guestfs
+
+class virtual bootloader = object
+  method virtual name : string
+  method virtual augeas_device_patterns : string list
+  method virtual list_kernels : string list
+  method virtual set_default_kernel : string -> unit
+  method set_augeas_configuration () = false
+  method virtual configure_console : unit -> unit
+  method virtual remove_console : unit -> unit
+  method update () = ()
+  method virtual get_config_file : unit -> string
+end
+
+(* Helper function for SUSE: remove (hdX,X) prefix from a path. *)
+let remove_hd_prefix =
+  let rex = PCRE.compile "^\\(hd.*\\)" in
+  PCRE.replace rex ""
+
+(* Grub1 (AKA grub-legacy) representation. *)
+class bootloader_grub1 (g : G.guestfs) root grub_config =
+  let () =
+  (* Apply the "grub" lens if it is not handling the file
+   * already -- Augeas < 1.7.0 will error out otherwise.
+   *)
+  if g#aug_ls ("/files" ^ grub_config) = [||] then
+    g#aug_transform "grub" grub_config in
+
+  (* Grub prefix?  Usually "/boot". *)
+  let grub_prefix =
+    let mounts = g#inspect_get_mountpoints root in
+    try
+      List.find (
+        fun path -> List.mem_assoc path mounts
+      ) [ "/boot/grub"; "/boot" ]
+    with Not_found -> "" in
+object
+  inherit bootloader
+
+  method name = "grub1"
+
+  method augeas_device_patterns = [
+    "/files" ^ grub_config ^ "/*/kernel/root";
+    "/files" ^ grub_config ^ "/*/kernel/resume";
+    "/files/boot/grub/device.map/*[label() != \"#comment\"]";
+    "/files/etc/sysconfig/grub/boot";
+  ]
+
+  method list_kernels =
+    let paths =
+      let expr = sprintf "/files%s/title/kernel" grub_config in
+      let paths = g#aug_match expr in
+      let paths = Array.to_list paths in
+
+      (* Remove duplicates. *)
+      let paths = List.remove_duplicates paths in
+
+      (* Get the default kernel from grub if it's set. *)
+      let default =
+        let expr = sprintf "/files%s/default" grub_config in
+        try
+          let idx = g#aug_get expr in
+          let idx = int_of_string idx in
+          (* Grub indices are zero-based, augeas is 1-based. *)
+          let expr =
+            sprintf "/files%s/title[%d]/kernel" grub_config (idx+1) in
+          Some expr
+        with G.Error msg
+             when String.find msg "aug_get: no matching node" >= 0 ->
+          None in
+
+      (* If a default kernel was set, put it at the beginning of the paths
+       * list.  If not set, assume the first kernel always boots (?)
+       *)
+      match default with
+      | None -> paths
+      | Some p -> p :: List.filter ((<>) p) paths in
+
+    (* Resolve the Augeas paths to kernel filenames. *)
+    let vmlinuzes = List.map g#aug_get paths in
+
+    (* Make sure kernel does not begin with (hdX,X). *)
+    let vmlinuzes = List.map remove_hd_prefix vmlinuzes in
+
+    (* Prepend grub filesystem. *)
+    List.map ((^) grub_prefix) vmlinuzes
+
+  method set_default_kernel vmlinuz =
+    if not (String.is_prefix vmlinuz grub_prefix) then
+      error (f_"kernel %s is not under grub tree %s")
+        vmlinuz grub_prefix;
+    let kernel_under_grub_prefix =
+      let prefix_len = String.length grub_prefix in
+      let kernel_len = String.length vmlinuz in
+      String.sub vmlinuz prefix_len (kernel_len - prefix_len) in
+
+    (* Find the grub entry for the given kernel. *)
+    let paths = g#aug_match (sprintf "/files%s/title/kernel[. = '%s']"
+                               grub_config kernel_under_grub_prefix) in
+    let paths = Array.to_list paths in
+    if paths = [] then
+      error (f_"didn't find grub entry for kernel %s") vmlinuz;
+    let path = List.hd paths in
+    let rex = PCRE.compile "/title(?:\\[(\\d+)\\])?/kernel" in
+    if not (PCRE.matches rex path) then
+      error (f_"internal error: regular expression did not match ‘%s’")
+        path;
+    let index = try int_of_string (PCRE.sub 1) - 1 with Not_found -> 0 in
+    g#aug_set (sprintf "/files%s/default" grub_config) (string_of_int index);
+    g#aug_save ()
+
+  method set_augeas_configuration () =
+    let incls = g#aug_match "/augeas/load/Grub/incl" in
+    let incls = Array.to_list incls in
+    let incls_contains_conf =
+      List.exists (fun incl -> g#aug_get incl = grub_config) incls in
+    if not incls_contains_conf then (
+      g#aug_set "/augeas/load/Grub/incl[last()+1]" grub_config;
+      true
+    ) else
+      false
+
+  method configure_console () =
+    let rex = PCRE.compile "\\b([xh]vc0)\\b" in
+    let expr = sprintf "/files%s/title/kernel/console" grub_config in
+
+    let paths = g#aug_match expr in
+    let paths = Array.to_list paths in
+    List.iter (
+      fun path ->
+        let console = g#aug_get path in
+        let console' = PCRE.replace ~global:true rex "ttyS0" console in
+        if console <> console' then g#aug_set path console'
+    ) paths;
+
+    g#aug_save ()
+
+  method remove_console () =
+    let rex = PCRE.compile "\\b([xh]vc0)\\b" in
+    let expr = sprintf "/files%s/title/kernel/console" grub_config in
+
+    let rec loop = function
+      | [] -> ()
+      | path :: paths ->
+        let console = g#aug_get path in
+        if PCRE.matches rex console then (
+          ignore (g#aug_rm path);
+          (* All the paths are invalid, restart the loop. *)
+          let paths = g#aug_match expr in
+          let paths = Array.to_list paths in
+          loop paths
+        )
+        else
+          loop paths
+    in
+    let paths = g#aug_match expr in
+    let paths = Array.to_list paths in
+    loop paths;
+
+    g#aug_save ()
+
+  method get_config_file () =
+    grub_config
+end
+
+(** The method used to get and set the default kernel in Grub2. *)
+type default_kernel_method =
+  | MethodGrubby  (** Use the 'grubby' tool. *)
+  | MethodPerlBootloader  (** Use the 'Bootloader::Tools' Perl module. *)
+  | MethodNone  (** No known way. *)
+
+(* Grub2 representation. *)
+class bootloader_grub2 (g : G.guestfs) grub_config =
+
+  let grub2_mkconfig_cmd =
+    let elems = [
+       "/sbin/grub2-mkconfig";
+       "/usr/sbin/grub2-mkconfig";
+       "/sbin/grub-mkconfig";
+       "/usr/sbin/grub-mkconfig"
+      ] in
+    try List.find (g#is_file ~followsymlinks:true) elems
+    with Not_found ->
+      error (f_"failed to find grub2-mkconfig binary (but Grub2 was detected on guest)")
+  in
+
+  let get_default_method =
+    let has_perl_bootloader () =
+      try
+        ignore (g#command [| "/usr/bin/perl"; "-MBootloader::Tools"; "-e1" |]);
+        true
+      with G.Error _ -> false
+    in
+    if g#exists "/sbin/grubby" then MethodGrubby
+    else if has_perl_bootloader () then MethodPerlBootloader
+    else (
+      warning (f_"could not determine a way to update the configuration of Grub2");
+      MethodNone
+    ) in
+
+object (self)
+  inherit bootloader
+
+  method name = "grub2"
+
+  method augeas_device_patterns = [
+    "/files/etc/sysconfig/grub/GRUB_CMDLINE_LINUX";
+    "/files/etc/default/grub/GRUB_CMDLINE_LINUX";
+    "/files/etc/default/grub/GRUB_CMDLINE_LINUX_DEFAULT";
+    "/files/boot/grub2/device.map/*[label() != \"#comment\"]";
+    "/files/boot/grub/device.map/*[label() != \"#comment\"]";
+  ]
+
+  method list_kernels =
+    let get_default_image () =
+      let res =
+        match get_default_method with
+        | MethodGrubby ->
+          let res = g#command [| "grubby"; "--default-kernel" |] in
+          (match res with
+           | "" -> None
+           | _ -> Some res)
+        | MethodPerlBootloader ->
+          let cmd =
+            [| "/usr/bin/perl"; "-MBootloader::Tools"; "-e"; "
+                  InitLibrary();
+                  my $default = Bootloader::Tools::GetDefaultSection ();
+                  if (!defined $default) {
+                    print 'NODEFAULTSECTION'
+                  }
+                  elsif (exists $default->{image}) {
+                    print $default->{image}
+                  }
+                  else {
+                    die 'no $default->{image}' # should never happen
+                  }
+               " |] in
+          let res = g#command cmd in
+          (match res with
+           | "NODEFAULTSECTION" -> None
+           | _ -> Some res)
+        | MethodNone ->
+          None in
+      match res with
+      | None -> None
+      | Some k ->
+         let k = String.chomp k in
+         Some (remove_hd_prefix k)
+    in
+
+    let vmlinuzes =
+      (match get_default_image () with
+      | None -> []
+      | Some k -> [k]) @
+        (* This is how the grub2 config generator enumerates kernels. *)
+        Array.to_list (g#glob_expand "/boot/kernel-*") @
+        Array.to_list (g#glob_expand "/boot/vmlinuz-*") @
+        Array.to_list (g#glob_expand "/vmlinuz-*") in
+    let vmlinuzes = List.filter (
+      fun filename -> not (Linux.is_package_manager_save_file filename)
+    ) vmlinuzes in
+    vmlinuzes
+
+  method set_default_kernel vmlinuz =
+    match get_default_method with
+    | MethodGrubby ->
+      ignore (g#command [| "grubby"; "--set-default"; vmlinuz |])
+    | MethodPerlBootloader ->
+      let cmd =
+        [| "/usr/bin/perl"; "-MBootloader::Tools"; "-e"; sprintf "
+            InitLibrary();
+            my @sections = GetSectionList(type=>image, image=>\"%s\");
+            my $section = GetSection(@sections);
+            my $newdefault = $section->{name};
+            SetGlobals(default, \"$newdefault\");
+          " vmlinuz |] in
+      ignore (g#command cmd)
+    | MethodNone -> ()
+
+  method private grub2_update_console ~remove () =
+    let rex = PCRE.compile "\\bconsole=[xh]vc0\\b" in
+
+    let paths = [
+      "/files/etc/sysconfig/grub/GRUB_CMDLINE_LINUX";
+      "/files/etc/default/grub/GRUB_CMDLINE_LINUX";
+      "/files/etc/default/grub/GRUB_CMDLINE_LINUX_DEFAULT"
+    ] in
+    let paths = List.map g#aug_match paths in
+    let paths = List.map Array.to_list paths in
+    let paths = List.flatten paths in
+    match paths with
+    | [] ->
+      if not remove then
+        warning (f_"could not add grub2 serial console (ignored)")
+      else
+        warning (f_"could not remove grub2 serial console (ignored)")
+    | path :: _ ->
+      let grub_cmdline = g#aug_get path in
+      if PCRE.matches rex grub_cmdline then (
+        let new_grub_cmdline =
+          if not remove then
+            PCRE.replace ~global:true rex "console=ttyS0" grub_cmdline
+          else
+            PCRE.replace ~global:true rex "" grub_cmdline in
+        g#aug_set path new_grub_cmdline;
+        g#aug_save ();
+
+        try
+          self#update ()
+        with
+          G.Error msg ->
+            warning (f_"could not rebuild grub2 configuration file (%s).  This may mean that grub output will not be sent to the serial port, but otherwise should be harmless.  Original error message: %s")
+              grub_config msg
+      )
+
+  method configure_console = self#grub2_update_console ~remove:false
+
+  method remove_console = self#grub2_update_console ~remove:true
+
+  method update () =
+    ignore (g#command [| grub2_mkconfig_cmd; "-o"; grub_config |]);
+
+    (* Grub2 runs osprober which sometimes leaves around read-only
+     * device-mapper maps covering existing filesystems.  These
+     * confuse later steps (especially fstrim).  So just delete
+     * any if found. (RHBZ#2003503).
+     *)
+    ignore (g#command [| "sh"; "-c"; "rm -f /dev/mapper/osprober-linux-*" |])
+
+  method get_config_file () =
+    grub_config
+end
+
+(* Helper type used in detect_bootloader. *)
+type bootloader_type =
+  | Grub1
+  | Grub2
+
+let detect_bootloader (g : G.guestfs) root i_firmware =
+  (* Where to start searching for bootloaders. *)
+  let mp =
+    match i_firmware with
+    | Firmware.I_BIOS -> "/boot"
+    | I_UEFI _ -> "/boot/efi/EFI" in
+
+  (* Find all paths below the mountpoint, then filter them to find
+   * the grub config file.
+   *)
+  let paths =
+    try List.map ((^) mp) (Array.to_list (g#find mp))
+    with G.Error msg ->
+      error (f_"could not find bootloader mount point (%s): %s") mp msg in
+
+  (* We can determine if the bootloader config file is grub 1 or
+   * grub 2 just by looking at the filename.
+   *)
+  let bootloader_type_of_filename path =
+    match last_part_of path '/' with
+    | Some "grub.cfg" -> Some Grub2
+    | Some ("grub.conf" | "menu.lst") -> Some Grub1
+    | Some _
+    | None -> None
+  in
+
+  let grub_config, typ =
+    let rec loop = function
+      | [] -> error (f_"no bootloader detected")
+      | path :: paths ->
+         match bootloader_type_of_filename path with
+         | None -> loop paths
+         | Some typ ->
+            if not (g#is_file ~followsymlinks:true path) then loop paths
+            else path, typ
+    in
+    loop paths in
+
+  let bl =
+    match typ with
+    | Grub1 -> new bootloader_grub1 g root grub_config
+    | Grub2 -> new bootloader_grub2 g grub_config in
+  debug "detected bootloader %s at %s" bl#name grub_config;
+  bl
diff --git a/common/mldrivers/linux_bootloaders.mli b/common/mldrivers/linux_bootloaders.mli
new file mode 100644 (file)
index 0000000..449ea5a
--- /dev/null
@@ -0,0 +1,57 @@
+(* virt-v2v
+ * Copyright (C) 2009-2023 Red Hat Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *)
+
+class virtual bootloader : object
+  method virtual name : string
+  (** The name of the bootloader, for debugging messages. *)
+
+  method virtual augeas_device_patterns : string list
+  (** A list of Augeas patterns to search for device names when we
+      need to rewrite device names (eg. [/dev/hda] to [/dev/vda]). *)
+
+  method virtual list_kernels : string list
+  (** Lists all the kernels configured in the bootloader. *)
+
+  method virtual set_default_kernel : string -> unit
+  (** Sets the specified vmlinuz path as default bootloader entry. *)
+
+  method set_augeas_configuration : unit -> bool
+  (** Checks whether the bootloader configuration file is included
+      in Augeas load list, and if it is not, then include it.
+
+      Returns true if Augeas needs to be reloaded. *)
+
+  method virtual configure_console : unit -> unit
+  method virtual remove_console : unit -> unit
+  (** Adds or removes a serial console to all the available kernels. *)
+
+  method update : unit -> unit
+  (** Update the bootloader: For grub2 only this runs the
+      [grub2-mkconfig] command to rebuild the configuration.  This
+      is not necessary for grub-legacy. *)
+
+  method virtual get_config_file : unit -> string
+  (** Returns the path to the bootloader config file,
+      e.g /boot/grub/grub.cfg *)
+end
+(** Encapsulates a Linux boot loader as object. *)
+
+val detect_bootloader : Guestfs.guestfs -> string -> Firmware.i_firmware ->
+                        bootloader
+(** [detect_bootloader g root i_firmware] detects the bootloader on the
+    guest, and creates the object representing it. *)
diff --git a/common/mldrivers/linux_kernels.ml b/common/mldrivers/linux_kernels.ml
new file mode 100644 (file)
index 0000000..a46146a
--- /dev/null
@@ -0,0 +1,343 @@
+(* virt-v2v
+ * Copyright (C) 2009-2023 Red Hat Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *)
+
+(* Detect which kernels are installed and offered by the bootloader. *)
+
+open Printf
+
+open Std_utils
+open Tools_utils
+open Common_gettext.Gettext
+
+module G = Guestfs
+
+(* Kernel information. *)
+type kernel_info = {
+  ki_app : G.application2;
+  ki_name : string;
+  ki_version : string;
+  ki_arch : string;
+  ki_vmlinuz : string;
+  ki_vmlinuz_stat : G.statns;
+  ki_initrd : string option;
+  ki_modpath : string;
+  ki_modules : string list;
+  ki_supports_virtio_blk : bool;
+  ki_supports_virtio_net : bool;
+  ki_supports_virtio_rng : bool;
+  ki_supports_virtio_balloon : bool;
+  ki_supports_isa_pvpanic : bool;
+  ki_supports_virtio_socket : bool;
+  ki_is_xen_pv_only_kernel : bool;
+  ki_is_debug : bool;
+  ki_config_file : string option;
+}
+
+let print_kernel_info chan prefix ki =
+  let fpf fs = output_string chan prefix; fprintf chan fs in
+  fprintf chan "* %s %s (%s)\n" ki.ki_name ki.ki_version ki.ki_arch;
+  fpf "%s\n" ki.ki_vmlinuz;
+  fpf "%s\n" (match ki.ki_initrd with None -> "no initrd" | Some s -> s);
+  fpf "%s\n" (match ki.ki_config_file with None -> "no config" | Some s -> s);
+  fpf "%s\n" ki.ki_modpath;
+  fpf "%d modules found\n" (List.length ki.ki_modules);
+  fpf "virtio: blk=%b net=%b rng=%b balloon=%b\n"
+      ki.ki_supports_virtio_blk ki.ki_supports_virtio_net
+      ki.ki_supports_virtio_rng ki.ki_supports_virtio_balloon;
+  fpf "pvpanic=%b vsock=%b xen=%b debug=%b\n"
+      ki.ki_supports_isa_pvpanic ki.ki_supports_virtio_socket
+      ki.ki_is_xen_pv_only_kernel ki.ki_is_debug
+
+let rex_ko = PCRE.compile "\\.k?o(?:\\.(?:xz|zst))?$"
+let rex_ko_extract = PCRE.compile "/([^/]+)\\.k?o(?:\\.(?:xz|zst))?$"
+
+let detect_kernels (g : G.guestfs) root bootloader apps =
+  (* What kernel/kernel-like packages are installed on the current guest? *)
+  let installed_kernels : kernel_info list =
+    let check_config feature = function
+      | None -> false
+      | Some config ->
+        let prefix = "^CONFIG_" ^ String.uppercase_ascii feature ^ "=" in
+        let lines = g#grep ~extended:true prefix config in
+        let lines = Array.to_list lines in
+        match lines with
+        | [] -> false
+        | line :: _ ->
+          let kind = snd (String.split "=" line) in
+          (match kind with
+          | "m" | "y" -> true
+          | _ -> false
+          )
+    in
+    let rex_initrd =
+      let is_debian_family =
+        let distro = g#inspect_get_distro root in
+        match distro with
+        | "debian" | "ubuntu" | "linuxmint" | "kalilinux" -> true
+        | _ -> false in
+      if is_debian_family then
+        PCRE.compile "^initrd.img-.*$"
+      else
+        PCRE.compile "^initr(?:d|amfs)-.*(?:\\.img)?$" in
+    let kernel_pkgs = List.filter (
+      fun { G.app2_name = name } ->
+        name = "kernel"
+          || (String.is_prefix name "kernel-" && not (String.is_suffix name "-devel"))
+          || String.is_prefix name "linux-image-"
+    ) apps in
+    if verbose () then (
+      let names = List.map (fun { G.app2_name = name } -> name) kernel_pkgs in
+      eprintf "candidate kernel packages in this guest: %s%!\n"
+        (String.concat " " names)
+    );
+    List.filter_map (
+      fun ({ G.app2_name = name } as app) ->
+        (try
+           (* For each kernel, list the files directly owned by the kernel. *)
+           let files = Linux.file_list_of_package g root app in
+
+           (* Which of these is the kernel itself?  Also, make sure to check
+            * it exists by stat'ing it.
+            *)
+           let vmlinuz = List.find (
+             fun filename -> String.is_prefix filename "/boot/vmlinuz-"
+           ) files in
+           let vmlinuz_stat =
+             try g#statns vmlinuz with G.Error _ -> raise Not_found in
+
+           (* Determine the modpath from the package, falling back to the
+            * version in the vmlinuz file name.
+            *)
+           let modpath, version =
+             let prefix = "/lib/modules/" in
+             try
+               let prefix_len = String.length prefix in
+               List.find_map (
+                 fun filename ->
+                   let filename_len = String.length filename in
+                   if filename_len > prefix_len &&
+                      String.is_prefix filename prefix then (
+                     let version = String.sub filename prefix_len
+                                              (filename_len - prefix_len) in
+                     Some (filename, version)
+                   ) else
+                     None
+               ) files
+             with Not_found ->
+               let version =
+                 String.sub vmlinuz 14 (String.length vmlinuz - 14) in
+               let modpath = prefix ^ version in
+               modpath, version in
+
+           (* Check that the modpath exists. *)
+           if not (g#is_dir ~followsymlinks:true modpath) then
+             raise Not_found;
+
+           (* Find the initramfs which corresponds to the kernel.
+            * Since the initramfs is built at runtime, and doesn't have
+            * to be covered by the RPM file list, this is basically
+            * guesswork.
+            *)
+           let initrd =
+             let files = g#ls "/boot" in
+             let files = Array.to_list files in
+             let files =
+               List.filter (fun n -> PCRE.matches rex_initrd n) files in
+             let files =
+               List.filter (
+                 fun n ->
+                   String.find n version >= 0
+               ) files in
+             (* Don't consider kdump initramfs images (RHBZ#1138184). *)
+             let files =
+               List.filter (fun n -> String.find n "kdump" == -1) files in
+             (* If several files match, take the shortest match.  This
+              * handles the case where we have a mix of same-version non-Xen
+              * and Xen kernels:
+              *   initrd-2.6.18-308.el5.img
+              *   initrd-2.6.18-308.el5xen.img
+              * and kernel 2.6.18-308.el5 (non-Xen) will match both
+              * (RHBZ#1141145).
+              *)
+             let cmp a b = compare (String.length a) (String.length b) in
+             let files = List.sort cmp files in
+             match files with
+             | [] ->
+               warning (f_"no initrd was found in /boot matching %s %s.")
+                 name version;
+               None
+             | x :: _ -> Some ("/boot/" ^ x) in
+
+           (* Get all modules, which might include custom-installed
+            * modules that don't appear in 'files' list above.
+            *)
+           let modules = g#find modpath in
+           let modules = Array.to_list modules in
+           let modules =
+             List.filter (fun m -> PCRE.matches rex_ko m) modules in
+           assert (List.length modules > 0);
+
+           (* Determine the kernel architecture by looking at the
+            * architecture of a kernel module.
+            *
+            * To avoid architecture detection issues with 3rd party
+            * modules (RHBZ#1690574), try to pick one of the well
+            * known modules, if available.  Otherwise, an arbitrary
+            * module is used.
+            *)
+           let arch =
+             (* Well known kernel modules. *)
+             let candidates = [ "virtio"; "kvm" ] in
+             let all_candidates = List.flatten (
+               List.map (
+                 fun f ->
+                   [ "/" ^ f ^ ".o";
+                     "/" ^ f ^ ".ko";
+                     "/" ^ f ^ ".ko.xz";
+                     "/" ^ f ^ ".ko.zst";
+                   ]
+               ) candidates
+             ) in
+             let candidate =
+               try
+                 List.find (
+                   fun m ->
+                     List.exists (String.is_suffix m) all_candidates
+                 ) modules
+               with Not_found ->
+                 (* No known module found, pick an arbitrary one
+                  * (the first).
+                  *)
+                 List.hd modules in
+             let candidate = modpath ^ candidate in
+             g#file_architecture (g#realpath candidate) in
+
+           (* Just return the module names, without path or extension. *)
+           let modules = List.filter_map (
+             fun m ->
+               if PCRE.matches rex_ko_extract m then
+                 Some (PCRE.sub 1)
+               else
+                 None
+           ) modules in
+           assert (List.length modules > 0);
+
+           let config_file =
+             let cfg = "/boot/config-" ^ version in
+             if g#is_file ~followsymlinks:true cfg then Some cfg
+             else None in
+
+           let kernel_supports what kconf =
+             List.mem what modules || check_config kconf config_file in
+
+           let supports_virtio_blk =
+             kernel_supports "virtio_blk" "VIRTIO_BLK" in
+           let supports_virtio_net =
+             kernel_supports "virtio_net" "VIRTIO_NET" in
+           let supports_virtio_rng =
+             kernel_supports "virtio-rng" "HW_RANDOM_VIRTIO" in
+           let supports_virtio_balloon =
+             kernel_supports "virtio_balloon" "VIRTIO_BALLOON" in
+           let supports_isa_pvpanic =
+             kernel_supports "pvpanic" "PVPANIC" in
+           let supports_virtio_socket =
+               kernel_supports "vmw_vsock_virtio_transport" "VIRTIO_VSOCKETS" in
+           let is_xen_pv_only_kernel =
+             check_config "X86_XEN" config_file ||
+             check_config "X86_64_XEN" config_file in
+
+           (* If the package name is like "kernel-debug", then it's
+            * a debug kernel.
+            *)
+           let is_debug =
+             String.is_suffix app.G.app2_name "-debug" ||
+             String.is_suffix app.G.app2_name "-dbg" in
+
+           Some {
+             ki_app  = app;
+             ki_name = name;
+             ki_version = version;
+             ki_arch = arch;
+             ki_vmlinuz = vmlinuz;
+             ki_vmlinuz_stat = vmlinuz_stat;
+             ki_initrd = initrd;
+             ki_modpath = modpath;
+             ki_modules = modules;
+             ki_supports_virtio_blk = supports_virtio_blk;
+             ki_supports_virtio_net = supports_virtio_net;
+             ki_supports_virtio_rng = supports_virtio_rng;
+             ki_supports_virtio_balloon = supports_virtio_balloon;
+             ki_supports_isa_pvpanic = supports_isa_pvpanic;
+             ki_supports_virtio_socket = supports_virtio_socket;
+             ki_is_xen_pv_only_kernel = is_xen_pv_only_kernel;
+             ki_is_debug = is_debug;
+             ki_config_file = config_file;
+           }
+
+         with Not_found -> None
+        )
+    ) kernel_pkgs in
+
+  if verbose () then (
+    eprintf "installed kernel packages in this guest:\n";
+    List.iter (print_kernel_info stderr "\t") installed_kernels;
+    flush stderr
+  );
+
+  if installed_kernels = [] then
+    error (f_"no installed kernel packages were found.\n\nThis probably indicates that %s was unable to inspect this guest properly.")
+      prog;
+
+  (* Now the difficult bit.  Get the bootloader kernels.  The first in this
+   * list is the default booting kernel.
+   *)
+  let bootloader_kernels : kernel_info list =
+    let vmlinuzes = bootloader#list_kernels in
+
+    (* Map these to installed kernels. *)
+    List.filter_map (
+      fun vmlinuz ->
+        try
+          let statbuf = g#statns vmlinuz in
+          let kernel =
+            List.find (
+              fun { ki_vmlinuz_stat = s } ->
+                statbuf.G.st_dev = s.G.st_dev && statbuf.G.st_ino = s.G.st_ino
+            ) installed_kernels in
+          Some kernel
+        with
+        | Not_found -> None
+        | G.Error msg as exn ->
+          (* If it isn't "no such file or directory", then re-raise it. *)
+          if g#last_errno () <> G.Errno.errno_ENOENT then raise exn;
+          warning (f_"ignoring kernel %s in bootloader, as it does not exist.")
+            vmlinuz;
+          None
+    ) vmlinuzes in
+
+  if verbose () then (
+    eprintf "kernels offered by the bootloader in this guest (first in list is default):\n";
+    List.iter (print_kernel_info stderr "\t") bootloader_kernels;
+    flush stderr
+  );
+
+  if bootloader_kernels = [] then
+    error (f_"no kernels were found in the bootloader configuration.\n\nThis probably indicates that %s was unable to parse the bootloader configuration of this guest.")
+      prog;
+
+  bootloader_kernels
diff --git a/common/mldrivers/linux_kernels.mli b/common/mldrivers/linux_kernels.mli
new file mode 100644 (file)
index 0000000..0dfd504
--- /dev/null
@@ -0,0 +1,57 @@
+(* virt-v2v
+ * Copyright (C) 2009-2023 Red Hat Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *)
+
+(** Detect which kernels are installed and offered by the bootloader. *)
+
+type kernel_info = {
+  ki_app : Guestfs.application2;   (** The RPM package data. *)
+  ki_name : string;                (** eg. "kernel-PAE" *)
+  ki_version : string;             (** version-release *)
+  ki_arch : string;                (** Kernel architecture. *)
+  ki_vmlinuz : string;             (** The path of the vmlinuz file. *)
+  ki_vmlinuz_stat : Guestfs.statns;(** stat(2) of vmlinuz *)
+  ki_initrd : string option;       (** Path of initramfs, if found. *)
+  ki_modpath : string;             (** The module path. *)
+  ki_modules : string list;        (** The list of module names. *)
+  ki_supports_virtio_blk : bool;   (** Kernel supports virtio-blk? *)
+  ki_supports_virtio_net : bool;   (** Kernel supports virtio-net? *)
+  ki_supports_virtio_rng : bool;   (** Kernel supports virtio-rng? *)
+  ki_supports_virtio_balloon : bool; (** Kernel supports memory balloon? *)
+  ki_supports_isa_pvpanic : bool;  (** Kernel supports ISA pvpanic device? *)
+  ki_supports_virtio_socket : bool; (** Kernel supports virtio-socket? *)
+  ki_is_xen_pv_only_kernel : bool; (** Is a Xen paravirt-only kernel? *)
+  ki_is_debug : bool;              (** Is debug kernel? *)
+  ki_config_file : string option;  (** Path of config file, if found. *)
+}
+(** Kernel information. *)
+
+val detect_kernels : Guestfs.guestfs -> string ->
+                     Linux_bootloaders.bootloader ->
+                     Guestfs.application2 list ->
+                     kernel_info list
+(** [detect_kernels g root bootloader apps] detects the kernels offered
+    by the Linux bootloader (eg. grub).
+
+    It will only return the intersection of kernels that are
+    installed and kernels that the bootloader knows about.  The
+    first kernel in the returned list is the default boot option,
+    ie. what the guest would boot without interaction or overrides. *)
+
+val print_kernel_info : out_channel -> string -> kernel_info -> unit
+(** Print a kernel_info struct to the given output channel.  The
+    second parameter is a prefix for indentation etc. *)
diff --git a/common/mldrivers/windows_drivers.ml b/common/mldrivers/windows_drivers.ml
new file mode 100644 (file)
index 0000000..3e0730c
--- /dev/null
@@ -0,0 +1,261 @@
+(* virt-drivers
+ * Copyright (C) 2009-2023 Red Hat Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *)
+
+(* Detect which drivers are installed in the Windows Registry. *)
+
+open Printf
+open Scanf
+
+open Std_utils
+open Tools_utils
+open Common_gettext.Gettext
+
+module G = Guestfs
+
+type driver = {
+  name : string;                (** Driver name, eg. ["usbport"] *)
+  hwassoc : hardware list;      (** Associated list of hardware *)
+}
+and hardware =
+| PCI of pci_device
+| HID of hid_device
+| USB of usb_device
+| Other of string list          (** Anything that could not be parsed. *)
+and pci_device = {
+  pci_class : int64 option;
+  pci_vendor : int64 option;
+  pci_device : int64 option;
+  pci_subsys : int64 option;
+  pci_rev : int64 option;
+}
+and hid_device = {
+  hid_vendor : int64 option;
+  hid_product : int64 option;
+  hid_rev : int64 option;
+  hid_col : int64 option;
+  hid_multi : int64 option;
+}
+and usb_device = {
+  usb_vendor : int64 option;
+  usb_product : int64 option;
+  usb_rev : int64 option;
+  usb_multi : int64 option;
+}
+
+let re_inf = PCRE.compile ~caseless:true "^(.*)\\.inf$"
+
+let re_pci_cc = PCRE.compile ~caseless:true "^cc_([[:xdigit:]]{4,6})$"
+let re_pci_ven = PCRE.compile ~caseless:true "^ven_([[:xdigit:]]{4})$"
+let re_pci_dev = PCRE.compile ~caseless:true "^dev_([[:xdigit:]]{4})$"
+let re_pci_subsys = PCRE.compile ~caseless:true "^subsys_([[:xdigit:]]{8})$"
+let re_pci_rev = PCRE.compile ~caseless:true "^rev_([[:xdigit:]]{2})$"
+
+let re_hid_vid = PCRE.compile ~caseless:true "^vid_([[:xdigit:]]{4})$"
+let re_hid_pid = PCRE.compile ~caseless:true "^pid_([[:xdigit:]]{4})$"
+let re_hid_rev = PCRE.compile ~caseless:true "^rev_([[:xdigit:]]{2})$"
+let re_hid_col = PCRE.compile ~caseless:true "^col([[:xdigit:]]{2})$"
+let re_hid_multi = PCRE.compile ~caseless:true "^mi_([[:xdigit:]]{2})$"
+
+let re_usb_vid = PCRE.compile ~caseless:true "^vid_([[:xdigit:]]{4})$"
+let re_usb_pid = PCRE.compile ~caseless:true "^pid_([[:xdigit:]]{4})$"
+let re_usb_rev = PCRE.compile ~caseless:true "^rev_([[:xdigit:]]{2})$"
+let re_usb_multi = PCRE.compile ~caseless:true "^mi_([[:xdigit:]]{2})$"
+
+let rec detect_drivers (g : G.guestfs) root =
+  assert (g#inspect_get_type root = "windows");
+
+  let windows_system_hive = g#inspect_get_windows_system_hive root in
+  let drivers =
+    Registry.with_hive_readonly g windows_system_hive (
+      fun reg ->
+        let path = [ "DriverDatabase"; "DeviceIds" ] in
+        let deviceids_node =
+          match Registry.get_node reg path with
+          | Some node -> node
+          | None ->
+             error (f_"could not find registry entry \
+                       HKEY_LOCAL_MACHINE\\SYSTEM\\DriverDatabase\\DeviceIds \
+                       in this Windows guest.  It may be either a very old \
+                       or very new version of Windows \
+                       that we cannot process.") in
+
+        (*             inf_name   path          node *)
+        let children : (string * (string list * int64)) list =
+          get_inf_nodes reg deviceids_node in
+
+        let children =
+          List.map (fun (name, (path, node)) ->
+              String.lowercase_ascii name, (path, node)) children in
+
+        (* Group by inf_name. *)
+        let children = List.sort compare children in
+        let children : (string * (string list * int64) list) list=
+          List.group_by children in
+
+        (* Convert to a final list of drivers. *)
+        List.map (
+          fun (inf_name, hwassoc) ->
+            let hwassoc = List.map path_to_hardware hwassoc in
+            { name = inf_name; hwassoc }
+        ) children
+  ) in
+  drivers
+
+(* Find recursively all child nodes containing a key
+ * "<foo>.inf" = hex(3):01,ff,00,00
+ *
+ * Returns the list of [inf_name * (path * node)] where
+ * [inf_name] is the <foo> part of "<foo>.inf",
+ * [path] is the list of strings (node names) leading to this node,
+ * [node] is the hivex node number of the child node.
+ *)
+and get_inf_nodes reg root =
+  let nodes : (string list * int64) list = find_all_nodes reg root in
+  List.filter_map (
+    fun (path, h) ->
+      match is_inf_node reg h with
+      | None -> None
+      | Some inf_name -> Some (inf_name, (path, h))
+  ) nodes
+
+and find_all_nodes ((g, _) as reg) node =
+  (* Find all children of [node]. *)
+  let children = g#hivex_node_children node in
+  let children = Array.to_list children in
+  let children =
+    List.map (fun { G.hivex_node_h = h } -> [ g#hivex_node_name h ], h)
+      children in
+
+  (* Add any grandchild nodes below these children. *)
+  let grandchildren =
+    List.map (
+      fun (child_path, child) ->
+        let nodes = find_all_nodes reg child in
+        (* Need to prefix the path returned with the child path. *)
+        List.map (fun (path, h) -> child_path @ path, h) nodes
+    ) children in
+
+  children @ List.flatten grandchildren
+
+(* Does any value under the node satisfy is_inf_value below? *)
+and is_inf_node ((g, _) as reg) h =
+  (* Get the values in the registry key. *)
+  let values = g#hivex_node_values h in
+  let values = Array.to_list values in
+  let rec loop = function
+    | [] -> None
+    | { G.hivex_value_h = v } :: values ->
+       match is_inf_value reg v with
+       | None -> loop values
+       | Some inf_name -> Some inf_name
+  in
+  loop values
+
+(* Does the key name end in "<name>.inf" (case insensitive), and have
+ * an associated value which is data type 3, value 01 ff 00 00?
+ * Returns None if no, or Some name if yes.
+ *)
+and is_inf_value (g, _) v =
+  let typ = g#hivex_value_type v in
+  if typ <> 3L then None
+  else (
+    let key = g#hivex_value_key v in
+    if not (PCRE.matches re_inf key) then None
+    else (
+      let data = g#hivex_value_value v in
+      if data <> "\001\xff\000\000" then None
+      else Some (PCRE.sub 1) (* Return name of .inf file from re_inf above. *)
+    )
+  )
+
+(* Convert the \DeviceIds\... path to a hardware type, where possible. *)
+and path_to_hardware (path, _) =
+  match path with
+  | pci :: path when String.lowercase_ascii pci = "pci" ->
+     pci_to_hardware path
+  | hid :: path when String.lowercase_ascii hid = "hid" ->
+     hid_to_hardware path
+  | usb :: path when String.lowercase_ascii usb = "usb" ->
+     usb_to_hardware path
+  | _ -> Other path
+
+and pci_to_hardware = function
+  | keys :: _ ->
+     let keys = String.nsplit "&" keys in
+     let empty = { pci_class = None; pci_vendor = None; pci_device = None;
+                   pci_subsys = None; pci_rev = None } in
+     let f pci key =
+       if PCRE.matches re_pci_cc key then
+         { pci with pci_class = Some (sscanf (PCRE.sub 1) "%Lx" identity) }
+       else if PCRE.matches re_pci_ven key then
+         { pci with pci_vendor = Some (sscanf (PCRE.sub 1) "%Lx" identity) }
+       else if PCRE.matches re_pci_dev key then
+         { pci with pci_device = Some (sscanf (PCRE.sub 1) "%Lx" identity) }
+       else if PCRE.matches re_pci_subsys key then
+         { pci with pci_subsys = Some (sscanf (PCRE.sub 1) "%Lx" identity) }
+       else if PCRE.matches re_pci_rev key then
+         { pci with pci_rev = Some (sscanf (PCRE.sub 1) "%Lx" identity) }
+       else
+         pci
+     in
+     PCI (List.fold_left f empty keys)
+  | path -> Other ("PCI" :: path)
+
+and hid_to_hardware = function
+  | keys :: _ ->
+     let keys = String.nsplit "&" keys in
+     let empty = { hid_vendor = None; hid_product = None;
+                   hid_rev = None; hid_col = None; hid_multi = None } in
+     let f hid key =
+       if PCRE.matches re_hid_vid key then
+         { hid with hid_vendor = Some (sscanf (PCRE.sub 1) "%Lx" identity) }
+       else if PCRE.matches re_hid_pid key then
+         { hid with hid_product = Some (sscanf (PCRE.sub 1) "%Lx" identity) }
+       else if PCRE.matches re_hid_rev key then
+         { hid with hid_rev = Some (sscanf (PCRE.sub 1) "%Lx" identity) }
+       else if PCRE.matches re_hid_col key then
+         { hid with hid_col = Some (sscanf (PCRE.sub 1) "%Lx" identity) }
+       else if PCRE.matches re_hid_multi key then
+         { hid with hid_multi = Some (sscanf (PCRE.sub 1) "%Lx" identity) }
+       else
+         hid
+     in
+     HID (List.fold_left f empty keys)
+
+  | path -> Other ("HID" :: path)
+
+and usb_to_hardware = function
+  | keys :: _ ->
+     let keys = String.nsplit "&" keys in
+     let empty = { usb_vendor = None; usb_product = None;
+                   usb_rev = None; usb_multi = None } in
+     let f usb key =
+       if PCRE.matches re_usb_vid key then
+         { usb with usb_vendor = Some (sscanf (PCRE.sub 1) "%Lx" identity) }
+       else if PCRE.matches re_usb_pid key then
+         { usb with usb_product = Some (sscanf (PCRE.sub 1) "%Lx" identity) }
+       else if PCRE.matches re_usb_rev key then
+         { usb with usb_rev = Some (sscanf (PCRE.sub 1) "%Lx" identity) }
+       else if PCRE.matches re_usb_multi key then
+         { usb with usb_multi = Some (sscanf (PCRE.sub 1) "%Lx" identity) }
+       else
+         usb
+     in
+     USB (List.fold_left f empty keys)
+
+  | path -> Other ("USB" :: path)
diff --git a/common/mldrivers/windows_drivers.mli b/common/mldrivers/windows_drivers.mli
new file mode 100644 (file)
index 0000000..057a798
--- /dev/null
@@ -0,0 +1,58 @@
+(* virt-drivers
+ * Copyright (C) 2009-2023 Red Hat Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *)
+
+(** Detect which drivers are installed in the Windows Registry. *)
+
+type driver = {
+  name : string;                (** Driver name, eg. ["usbport"] *)
+  hwassoc : hardware list;      (** Associated list of hardware *)
+}
+and hardware =
+| PCI of pci_device
+| HID of hid_device
+| USB of usb_device
+| Other of string list          (** Anything that could not be parsed. *)
+and pci_device = {
+  pci_class : int64 option;
+  pci_vendor : int64 option;
+  pci_device : int64 option;
+  pci_subsys : int64 option;
+  pci_rev : int64 option;
+}
+and hid_device = {
+  hid_vendor : int64 option;
+  hid_product : int64 option;
+  hid_rev : int64 option;
+  hid_col : int64 option;
+  hid_multi : int64 option;
+}
+and usb_device = {
+  usb_vendor : int64 option;
+  usb_product : int64 option;
+  usb_rev : int64 option;
+  usb_multi : int64 option;
+}
+
+val detect_drivers : Guestfs.guestfs -> string -> driver list
+(** [detect_kernels g root] detects the drivers installed in
+    the Windows guest, returning their names and the hardware
+    associations.
+
+    The information is retrieved from the
+    [HKEY_LOCAL_MACHINE\SYSTEM\DriverDatabase\DeviceIds\]
+    key in the system registry. *)
index e71f08c0fc8608e2ae9af6df779190fc86798d4a..c3e1925c04c679fa86fa7d7dccb9f21a52721152 100644 (file)
@@ -32,7 +32,7 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -278,7 +278,6 @@ EGREP = @EGREP@
 ETAGS = @ETAGS@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FILECMD = @FILECMD@
 GCC_VISIBILITY_HIDDEN = @GCC_VISIBILITY_HIDDEN@
 GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
 GMSGFMT = @GMSGFMT@
@@ -307,6 +306,8 @@ LIBINTL = @LIBINTL@
 LIBLZMA_CFLAGS = @LIBLZMA_CFLAGS@
 LIBLZMA_LIBS = @LIBLZMA_LIBS@
 LIBOBJS = @LIBOBJS@
+LIBOSINFO_CFLAGS = @LIBOSINFO_CFLAGS@
+LIBOSINFO_LIBS = @LIBOSINFO_LIBS@
 LIBS = @LIBS@
 LIBTINFO_CFLAGS = @LIBTINFO_CFLAGS@
 LIBTINFO_LIBS = @LIBTINFO_LIBS@
@@ -377,6 +378,7 @@ PO4A_TRANSLATE = @PO4A_TRANSLATE@
 PODWRAPPER = @PODWRAPPER@
 POSUB = @POSUB@
 RANLIB = @RANLIB@
+REALPATH = @REALPATH@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
index 0d7a136a9ca9c661ab560fd1db6c9258252ef29b..56935afa08b8e4add4c7ed6f5dd8a6d8dd23e15f 100644 (file)
@@ -32,7 +32,7 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -487,7 +487,6 @@ EGREP = @EGREP@
 ETAGS = @ETAGS@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FILECMD = @FILECMD@
 GCC_VISIBILITY_HIDDEN = @GCC_VISIBILITY_HIDDEN@
 GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
 GMSGFMT = @GMSGFMT@
@@ -516,6 +515,8 @@ LIBINTL = @LIBINTL@
 LIBLZMA_CFLAGS = @LIBLZMA_CFLAGS@
 LIBLZMA_LIBS = @LIBLZMA_LIBS@
 LIBOBJS = @LIBOBJS@
+LIBOSINFO_CFLAGS = @LIBOSINFO_CFLAGS@
+LIBOSINFO_LIBS = @LIBOSINFO_LIBS@
 LIBS = @LIBS@
 LIBTINFO_CFLAGS = @LIBTINFO_CFLAGS@
 LIBTINFO_LIBS = @LIBTINFO_LIBS@
@@ -586,6 +587,7 @@ PO4A_TRANSLATE = @PO4A_TRANSLATE@
 PODWRAPPER = @PODWRAPPER@
 POSUB = @POSUB@
 RANLIB = @RANLIB@
+REALPATH = @REALPATH@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
index 33074af1c5ff144a19b6198133b260950512b787..077290ef117a91cd05291945d67f47788dacae3b 100644 (file)
@@ -22,7 +22,7 @@ exception Error of string * int
 
 type regexp
 
-external compile : ?anchored:bool -> ?caseless:bool -> ?dotall:bool -> ?extended:bool -> ?multiline:bool -> string -> regexp = "guestfs_int_pcre_compile_byte" "guestfs_int_pcre_compile"
+external compile : ?caseless:bool -> ?dotall:bool -> ?extended:bool -> ?multiline:bool -> string -> regexp = "guestfs_int_pcre_compile"
 external matches : ?offset:int -> regexp -> string -> bool = "guestfs_int_pcre_matches"
 external sub : int -> string = "guestfs_int_pcre_sub"
 external subi : int -> int * int = "guestfs_int_pcre_subi"
index b59a3d1706031757b5a33d49c59b1ec36efdab7e..b69a56ba96807750de22478e792b0eb4075c2f59 100644 (file)
@@ -52,13 +52,12 @@ exception Error of string * int
 type regexp
 (** The type of a compiled regular expression. *)
 
-val compile : ?anchored:bool -> ?caseless:bool -> ?dotall:bool -> ?extended:bool -> ?multiline:bool -> string -> regexp
+val compile : ?caseless:bool -> ?dotall:bool -> ?extended:bool -> ?multiline:bool -> string -> regexp
 (** Compile a regular expression.  This can raise {!Error}.
 
-    The flags [?anchored], [?caseless], [?dotall], [?extended],
-    [?multiline]
-    correspond to the [pcre_compile] flags [PCRE_ANCHORED] etc.
-    See pcreapi(3) for details of what they do.
+    The flags [?caseless], [?dotall], [?extended], [?multiline]
+    correspond to the [pcre_compile] flags [PCRE_CASELESS] etc.
+    See pcre2api(3) for details of what they do.
     All flags default to false. *)
 
 val matches : ?offset:int -> regexp -> string -> bool
@@ -95,7 +94,7 @@ val subi : int -> int * int
     of the first character of the substring and the first
     character after the substring.
 
-    (See pcreapi(3) section "How pcre_exec() returns captured substrings"
+    (See pcre2api(3) section "How pcre_exec() returns captured substrings"
     for exact details).
 
     If there was no nth substring then this raises [Not_found]. *)
index f78083297b4f669892acf81af98d3eae1c53b95d..ad9c6d11095809fb8af32cd3b0fc1d7fc175fc42 100644 (file)
@@ -167,11 +167,11 @@ Optint_val (value intv, int defval)
 }
 
 value
-guestfs_int_pcre_compile (value anchoredv, value caselessv, value dotallv,
+guestfs_int_pcre_compile (value caselessv, value dotallv,
                           value extendedv, value multilinev,
                           value pattv)
 {
-  CAMLparam5 (anchoredv, caselessv, dotallv, extendedv, multilinev);
+  CAMLparam4 (caselessv, dotallv, extendedv, multilinev);
   CAMLxparam1 (pattv);
   const char *patt;
   int options = 0;
@@ -180,8 +180,6 @@ guestfs_int_pcre_compile (value anchoredv, value caselessv, value dotallv,
   PCRE2_SIZE errnum;
 
   /* Flag parameters are all ‘bool option’, defaulting to false. */
-  if (is_Some_true (anchoredv))
-    options |= PCRE2_ANCHORED;
   if (is_Some_true (caselessv))
     options |= PCRE2_CASELESS;
   if (is_Some_true (dotallv))
@@ -201,16 +199,6 @@ guestfs_int_pcre_compile (value anchoredv, value caselessv, value dotallv,
   CAMLreturn (Val_regexp (re));
 }
 
-/* OCaml calls C functions from bytecode a bit differently when they
- * have more than 5 parameters.
- */
-value
-guestfs_int_pcre_compile_byte (value *argv, int argn)
-{
-  return guestfs_int_pcre_compile (argv[0], argv[1], argv[2], argv[3], argv[4],
-                                   argv[5]);
-}
-
 value
 guestfs_int_pcre_matches (value offsetv, value rev, value strv)
 {
@@ -278,7 +266,6 @@ guestfs_int_pcre_sub (value nv)
   CAMLparam1 (nv);
   const int n = Int_val (nv);
   CAMLlocal1 (strv);
-  CLEANUP_FREE char *str = NULL;
   const struct last_match *m = pthread_getspecific (last_match);
   PCRE2_SIZE len;
   int r;
index 8790438ebd9022a38819766e28c6767805fe75af..dad8bd909311702ded538e2fb6b7441b43e22cbd 100644 (file)
 
 open Printf
 
-let compile ?(anchored = false) ?(caseless = false)
-            ?(dotall = false) ?(extended = false) ?(multiline = false)
+let compile ?(caseless = false) ?(dotall = false)
+            ?(extended = false) ?(multiline = false)
             patt =
-  eprintf "PCRE.compile%s%s%s%s%s %s\n%!"
-          (if anchored then " ~anchored:true" else "")
+  eprintf "PCRE.compile%s%s%s%s %s\n%!"
           (if caseless then " ~caseless:true" else "")
           (if dotall then " ~dotall:true" else "")
           (if extended then " ~extended:true" else "")
           (if multiline then " ~multiline:true" else "")
           patt;
-  PCRE.compile ~anchored ~caseless ~dotall ~extended ~multiline patt
+  PCRE.compile ~caseless ~dotall ~extended ~multiline patt
 
 let matches ?(offset = 0) re str =
   eprintf "PCRE.matches %s, %d ->%!" str offset;
index d1747788b07ef366623e9d90df196e83e2fd5aae..bd8d0db247e2a458595495d7f1874d380cb15532 100644 (file)
@@ -32,7 +32,7 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -277,7 +277,6 @@ EGREP = @EGREP@
 ETAGS = @ETAGS@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FILECMD = @FILECMD@
 GCC_VISIBILITY_HIDDEN = @GCC_VISIBILITY_HIDDEN@
 GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
 GMSGFMT = @GMSGFMT@
@@ -306,6 +305,8 @@ LIBINTL = @LIBINTL@
 LIBLZMA_CFLAGS = @LIBLZMA_CFLAGS@
 LIBLZMA_LIBS = @LIBLZMA_LIBS@
 LIBOBJS = @LIBOBJS@
+LIBOSINFO_CFLAGS = @LIBOSINFO_CFLAGS@
+LIBOSINFO_LIBS = @LIBOSINFO_LIBS@
 LIBS = @LIBS@
 LIBTINFO_CFLAGS = @LIBTINFO_CFLAGS@
 LIBTINFO_LIBS = @LIBTINFO_LIBS@
@@ -376,6 +377,7 @@ PO4A_TRANSLATE = @PO4A_TRANSLATE@
 PODWRAPPER = @PODWRAPPER@
 POSUB = @POSUB@
 RANLIB = @RANLIB@
+REALPATH = @REALPATH@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
index a9b3d37dfd181dffaf43824469bde6b115de2b33..78762919932dd21e1007012ae33161ce9e6d7218 100644 (file)
@@ -1,5 +1,5 @@
 (* virt-resize
- * Copyright (C) 2010-2012 Red Hat Inc.
+ * Copyright (C) 2010-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index 3a48d57a2ede27bc3e9886bddf4eb5c49036dd25..741b01a2ecc22ea0086c4a446aa25e3e69574bc8 100644 (file)
@@ -32,7 +32,7 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -491,7 +491,6 @@ EGREP = @EGREP@
 ETAGS = @ETAGS@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FILECMD = @FILECMD@
 GCC_VISIBILITY_HIDDEN = @GCC_VISIBILITY_HIDDEN@
 GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
 GMSGFMT = @GMSGFMT@
@@ -520,6 +519,8 @@ LIBINTL = @LIBINTL@
 LIBLZMA_CFLAGS = @LIBLZMA_CFLAGS@
 LIBLZMA_LIBS = @LIBLZMA_LIBS@
 LIBOBJS = @LIBOBJS@
+LIBOSINFO_CFLAGS = @LIBOSINFO_CFLAGS@
+LIBOSINFO_LIBS = @LIBOSINFO_LIBS@
 LIBS = @LIBS@
 LIBTINFO_CFLAGS = @LIBTINFO_CFLAGS@
 LIBTINFO_LIBS = @LIBTINFO_LIBS@
@@ -590,6 +591,7 @@ PO4A_TRANSLATE = @PO4A_TRANSLATE@
 PODWRAPPER = @PODWRAPPER@
 POSUB = @POSUB@
 RANLIB = @RANLIB@
+REALPATH = @REALPATH@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
index 1a0cc5720260084b92f262a1c1acc6f8c3c0ee6d..ab6e71cbb30333d6b1d792045c58839e7bbf84c5 100644 (file)
@@ -301,6 +301,15 @@ module List = struct
           | Some y -> y
           | None -> find_map f xs
 
+    let rec group_by = function
+      | [] -> []
+      | (day1, x1) :: (day2, x2) :: rest when day1 = day2 ->
+         let rest = group_by ((day2, x2) :: rest) in
+         let day, xs = List.hd rest in
+         (day, x1 :: xs) :: List.tl rest
+      | (day, x) :: rest ->
+         (day, [x]) :: group_by rest
+
     let rec combine3 xs ys zs =
       match xs, ys, zs with
       | [], [], [] -> []
@@ -349,6 +358,11 @@ module List = struct
       xsp := xs;
       x
 
+    let may_push_back xsp x =
+      match x with None -> () | Some x -> push_back xsp x
+    let may_push_front x xsp =
+      match x with None -> () | Some x -> push_front x xsp
+
     let push_back_list xsp xs = xsp := !xsp @ xs
     let push_front_list xs xsp = xsp := xs @ !xsp
 end
index d568c010f243194b516b9f400d68be227f86c65f..782d8fd392da3524a80c404d3e93fc366b0bb874 100644 (file)
@@ -201,6 +201,12 @@ module List : sig
         [f x] returns [Some y].  It returns [y].  If we exhaust the
         list then this raises [Not_found]. *)
 
+    val group_by : ('a * 'b) list -> ('a * 'b list) list
+    (** [group_by [1, "foo"; 2, "bar"; 2, "baz"; 2, "biz"; 3, "boo"; 4, "fizz"]]
+        - : (int * string list) list
+        [(1, ["foo"]); (2, ["bar"; "baz"; "biz"]); (3, ["boo"]); (4, ["fizz"])]
+        *)
+
     val combine3 : 'a list -> 'b list -> 'c list -> ('a * 'b * 'c) list
     (** Like {!List.combine} but for triples.
         All lists must be the same length. *)
@@ -246,6 +252,18 @@ module List : sig
         If a zero-length list is passed in, this raises [Failure
         "pop_front"]. *)
 
+    val may_push_back : 'a list ref -> 'a option -> unit
+    val may_push_front : 'a option -> 'a list ref -> unit
+    (** More imperative list manipulation functions.
+
+        [may_push_back xsp None] does nothing.
+
+        [may_push_back xsp (Some x)] appends [x] to the end of the list.
+
+        [may_push_front None xsp] does nothing.
+
+        [may_push_front (Some x) xsp] prepends [x] to the head of the list. *)
+
     val push_back_list : 'a list ref -> 'a list -> unit
     val push_front_list : 'a list -> 'a list ref -> unit
     (** More imperative list manipulation functions.
diff --git a/common/mltools/DOM.ml b/common/mltools/DOM.ml
new file mode 100644 (file)
index 0000000..1a97072
--- /dev/null
@@ -0,0 +1,171 @@
+(* virt-v2v
+ * Copyright (C) 2009-2023 Red Hat Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *)
+
+(* Poor man's XML DOM, mutable for ease of modification. *)
+
+open Std_utils
+open Tools_utils
+
+open Printf
+
+type node =
+  | PCData of string
+  | Comment of string
+  | Element of element
+and element = {
+  e_name : string;                      (* Name of element. *)
+  mutable e_attrs : attr list;          (* Attributes. *)
+  mutable e_children : node list;       (* Child elements. *)
+}
+and attr = string * string
+and doc = Doc of element
+
+let doc name attrs children =
+  Doc { e_name = name; e_attrs = attrs; e_children = children }
+
+let e name attrs children =
+  Element { e_name = name; e_attrs = attrs; e_children = children }
+
+(* This outputs nicely formatted and indented XML, ie. with lots of
+ * whitespace.  As far as I know this is safe for the kind of documents
+ * we will be writing, ie. libvirt XML and OVF metadata, where
+ * whitespace is generally not significant, but readability is useful.
+ *)
+let rec node_to_buf ?(indent = 0) buf = function
+  | PCData str ->
+     Buffer.add_string buf (xml_quote_pcdata str)
+  | Comment str ->
+     buffer_add_spaces buf indent;
+     bprintf buf "<!-- %s -->" (xml_quote_pcdata str)
+  | Element e ->
+     element_to_buf ~indent buf e
+and element_to_buf ?(indent = 0) buf
+    { e_name = name; e_attrs = attrs; e_children = children } =
+  buffer_add_spaces buf indent;
+  bprintf buf "<%s" name;
+  List.iter (fun (n, v) -> bprintf buf " %s='%s'" n (xml_quote_attr v)) attrs;
+  if children <> [] then (
+    Buffer.add_string buf ">";
+    let last_child_was_element = ref false in
+    List.iter (
+      function
+      | Element _ as child ->
+        last_child_was_element := true;
+        Buffer.add_char buf '\n';
+        node_to_buf ~indent:(indent+2) buf child;
+      | PCData _ as child ->
+        last_child_was_element := false;
+        node_to_buf ~indent:(indent+2) buf child;
+      | Comment _ as child ->
+        last_child_was_element := true;
+        Buffer.add_char buf '\n';
+        node_to_buf ~indent:(indent+2) buf child;
+    ) children;
+    if !last_child_was_element then (
+      Buffer.add_char buf '\n';
+      buffer_add_spaces buf indent
+    );
+    bprintf buf "</%s>" name
+  ) else (
+    Buffer.add_string buf "/>"
+  )
+
+and buffer_add_spaces buf n =
+  Buffer.add_string buf (String.spaces n)
+
+(* Quote XML <element attr='...'> content.  Note you must use single
+ * quotes around the attribute.
+ *)
+and xml_quote_attr str =
+  let str = String.replace str "&" "&amp;" in
+  let str = String.replace str "'" "&apos;" in
+  let str = String.replace str "<" "&lt;" in
+  let str = String.replace str ">" "&gt;" in
+  str
+
+and xml_quote_pcdata str =
+  let str = String.replace str "&" "&amp;" in
+  let str = String.replace str "<" "&lt;" in
+  let str = String.replace str ">" "&gt;" in
+  str
+
+let doc_to_buf buf (Doc doc) =
+  bprintf buf "<?xml version='1.0' encoding='utf-8'?>\n";
+  element_to_buf buf doc;
+  bprintf buf "\n"
+
+let doc_to_string doc =
+  let buf = Buffer.create 4096 in
+  doc_to_buf buf doc;
+  Buffer.contents buf
+
+let doc_to_chan chan doc =
+  let buf = Buffer.create 4096 in
+  doc_to_buf buf doc;
+  Buffer.output_buffer chan buf
+
+let path_to_nodes (Doc doc) path =
+  match path with
+  | [] -> invalid_arg "path_to_nodes: empty path"
+  | top_name :: path ->
+    if doc.e_name <> top_name then []
+    else (
+      let rec loop nodes path =
+        match path with
+        | [] -> []
+        | [p] ->
+          List.filter (
+            function
+            | PCData _ -> false
+            | Comment _ -> false
+            | Element e when e.e_name = p -> true
+            | Element _ -> false
+          ) nodes
+        | p :: ps ->
+          let children =
+            List.filter_map (
+              function
+              | PCData _ -> None
+              | Comment _ -> None
+              | Element e when e.e_name = p -> Some e.e_children
+              | Element _ -> None
+            ) nodes in
+          List.concat (List.map (fun nodes -> loop nodes ps) children)
+      in
+      loop doc.e_children path
+    )
+
+let filter_node_list_by_attr nodes attr =
+  List.filter (
+    function
+    | Element { e_attrs = attrs } when List.mem attr attrs -> true
+    | Element _ | PCData _ | Comment _ -> false
+  ) nodes
+
+let find_node_by_attr nodes attr =
+  match filter_node_list_by_attr nodes attr with
+  | [] -> raise Not_found
+  | x::_ -> x
+
+let append_attr attr = function
+  | PCData _ | Comment _ -> invalid_arg "append_attr"
+  | Element e -> e.e_attrs <- e.e_attrs @ [attr]
+
+let append_child child = function
+  | PCData _ | Comment _ -> invalid_arg "append_child"
+  | Element e -> e.e_children <- e.e_children @ [child]
diff --git a/common/mltools/DOM.mli b/common/mltools/DOM.mli
new file mode 100644 (file)
index 0000000..ba505b5
--- /dev/null
@@ -0,0 +1,92 @@
+(* virt-v2v
+ * Copyright (C) 2009-2023 Red Hat Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *)
+
+(** Poor man's XML DOM, mutable for ease of modification. *)
+
+type element
+type doc = Doc of element
+type attr = string * string
+
+type node =
+  | PCData of string         (** Text. *)
+  | Comment of string        (** <!-- comment --> *)
+  | Element of element       (** <element/> with attrs and children *)
+
+val doc : string -> attr list -> node list -> doc
+(** A quick way to create a document. *)
+
+val e : string -> attr list -> node list -> node
+(** A quick way to create elements.
+
+    Typical use is:
+{v
+  e "foo" [] [
+    e "bar" [] []
+    e "baz" [ "a", "b"; "c", "d"] []
+  ]
+v}
+    which creates the following OCaml tree structure:
+{v
+  Element {
+    e_name = "foo";
+    e_attrs = [];
+    e_children = [
+      Element { e_name = "bar"; ... };
+      Element { e_name = "baz"; e_attrs = [ "a", "b"; "c", "d" ]; ... };
+    ]
+  }
+v}
+    which corresponds to the following XML:
+{v
+  <foo>
+    <bar/>
+    <baz a="b" c="d"/>
+  </foo>
+v}
+*)
+
+val doc_to_string : doc -> string
+(** Convert a document to a string representation. *)
+
+val doc_to_chan : out_channel -> doc -> unit
+(** Write the XML document to an output channel. *)
+
+val path_to_nodes : doc -> string list -> node list
+(** Search down the path and return a list of all matching elements.
+    Returns an empty list if none were found. *)
+
+val filter_node_list_by_attr : node list -> attr -> node list
+(** Find DOM elements which have a particular attribute name=value (not
+    recursively).  If not found, returns an empty list. *)
+
+val find_node_by_attr : node list -> attr -> node
+(** Find the first DOM element which has a particular attribute
+    name=value (not recursively).  If not found, raises
+    [Not_found]. *)
+
+val append_attr : attr -> node -> unit
+(** [element] must be an [Element _] node.  [append_attr attr element]
+    appends [attr] to the attributes of [element].
+
+    This mutates [element]. *)
+
+val append_child : node -> node -> unit
+(** [element] must be an [Element _] node.  [append_child child
+    element] appends [child] to the children of [element].
+
+    This mutates [element]. *)
index 24167bce30a0308bbe11efbd259854c9d747aec0..f510a67473bdc7108e8299752ebc9f6b97b8ff57 100644 (file)
@@ -35,9 +35,12 @@ EXTRA_DIST = \
 SOURCES_MLI = \
        checksums.mli \
        curl.mli \
+       DOM.mli \
        getopt.mli \
        JSON.mli \
        JSON_parser.mli \
+       libosinfo.mli \
+       libosinfo_utils.mli \
        on_exit.mli \
        planner.mli \
        regedit.mli \
@@ -51,6 +54,7 @@ SOURCES_ML = \
        getopt.ml \
        JSON.ml \
        tools_utils.ml \
+       DOM.ml \
        on_exit.ml \
        URI.ml \
        planner.ml \
@@ -60,7 +64,9 @@ SOURCES_ML = \
        curl.ml \
        checksums.ml \
        xpath_helpers.ml \
-       urandom.ml
+       urandom.ml \
+       libosinfo.ml \
+       libosinfo_utils.ml
 
 SOURCES_C = \
        ../options/decrypt.c \
@@ -68,6 +74,7 @@ SOURCES_C = \
        ../options/uri.c \
        getopt-c.c \
        JSON_parser-c.c \
+       libosinfo-c.c \
        tools_utils-c.c \
        uri-c.c
 
@@ -110,6 +117,7 @@ libmltools_a_CFLAGS = \
        $(LIBXML2_CFLAGS) \
        $(LIBGUESTFS_CFLAGS) \
        $(JANSSON_CFLAGS) \
+       $(LIBOSINFO_CFLAGS) \
        -fPIC
 
 BOBJECTS = $(SOURCES_ML:.ml=.cmo)
@@ -141,6 +149,7 @@ OCAMLCLIBS = \
        $(LIBVIRT_LIBS) \
        $(LIBXML2_LIBS) \
        $(JANSSON_LIBS) \
+       $(LIBOSINFO_LIBS) \
        $(LIBINTL) \
        -lgnu
 
index 0faed6dd433c325eb6e6dc5373fe4990dced0086..913c1fa21bbfc1220082dcb434b6ffe160521d80 100644 (file)
@@ -32,7 +32,7 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -190,14 +190,15 @@ am__v_AR_1 =
 libmltools_a_AR = $(AR) $(ARFLAGS)
 libmltools_a_LIBADD =
 am__libmltools_a_SOURCES_DIST = ../options/decrypt.c ../options/keys.c \
-       ../options/uri.c getopt-c.c JSON_parser-c.c tools_utils-c.c \
-       uri-c.c
+       ../options/uri.c getopt-c.c JSON_parser-c.c libosinfo-c.c \
+       tools_utils-c.c uri-c.c
 am__dirstamp = $(am__leading_dot)dirstamp
 am__objects_1 = ../options/libmltools_a-decrypt.$(OBJEXT) \
        ../options/libmltools_a-keys.$(OBJEXT) \
        ../options/libmltools_a-uri.$(OBJEXT) \
        libmltools_a-getopt-c.$(OBJEXT) \
        libmltools_a-JSON_parser-c.$(OBJEXT) \
+       libmltools_a-libosinfo-c.$(OBJEXT) \
        libmltools_a-tools_utils-c.$(OBJEXT) \
        libmltools_a-uri-c.$(OBJEXT)
 @HAVE_OCAML_TRUE@am_libmltools_a_OBJECTS = $(am__objects_1)
@@ -253,6 +254,7 @@ am__depfiles_remade = ../options/$(DEPDIR)/libmltools_a-decrypt.Po \
        ./$(DEPDIR)/getopt_tests-dummy.Po \
        ./$(DEPDIR)/libmltools_a-JSON_parser-c.Po \
        ./$(DEPDIR)/libmltools_a-getopt-c.Po \
+       ./$(DEPDIR)/libmltools_a-libosinfo-c.Po \
        ./$(DEPDIR)/libmltools_a-tools_utils-c.Po \
        ./$(DEPDIR)/libmltools_a-uri-c.Po \
        ./$(DEPDIR)/machine_readable_tests-dummy.Po \
@@ -555,7 +557,6 @@ EGREP = @EGREP@
 ETAGS = @ETAGS@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FILECMD = @FILECMD@
 GCC_VISIBILITY_HIDDEN = @GCC_VISIBILITY_HIDDEN@
 GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
 GMSGFMT = @GMSGFMT@
@@ -584,6 +585,8 @@ LIBINTL = @LIBINTL@
 LIBLZMA_CFLAGS = @LIBLZMA_CFLAGS@
 LIBLZMA_LIBS = @LIBLZMA_LIBS@
 LIBOBJS = @LIBOBJS@
+LIBOSINFO_CFLAGS = @LIBOSINFO_CFLAGS@
+LIBOSINFO_LIBS = @LIBOSINFO_LIBS@
 LIBS = @LIBS@
 LIBTINFO_CFLAGS = @LIBTINFO_CFLAGS@
 LIBTINFO_LIBS = @LIBTINFO_LIBS@
@@ -654,6 +657,7 @@ PO4A_TRANSLATE = @PO4A_TRANSLATE@
 PODWRAPPER = @PODWRAPPER@
 POSUB = @POSUB@
 RANLIB = @RANLIB@
+REALPATH = @REALPATH@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
@@ -812,9 +816,12 @@ EXTRA_DIST = \
 SOURCES_MLI = \
        checksums.mli \
        curl.mli \
+       DOM.mli \
        getopt.mli \
        JSON.mli \
        JSON_parser.mli \
+       libosinfo.mli \
+       libosinfo_utils.mli \
        on_exit.mli \
        planner.mli \
        regedit.mli \
@@ -828,6 +835,7 @@ SOURCES_ML = \
        getopt.ml \
        JSON.ml \
        tools_utils.ml \
+       DOM.ml \
        on_exit.ml \
        URI.ml \
        planner.ml \
@@ -837,7 +845,9 @@ SOURCES_ML = \
        curl.ml \
        checksums.ml \
        xpath_helpers.ml \
-       urandom.ml
+       urandom.ml \
+       libosinfo.ml \
+       libosinfo_utils.ml
 
 SOURCES_C = \
        ../options/decrypt.c \
@@ -845,6 +855,7 @@ SOURCES_C = \
        ../options/uri.c \
        getopt-c.c \
        JSON_parser-c.c \
+       libosinfo-c.c \
        tools_utils-c.c \
        uri-c.c
 
@@ -880,6 +891,7 @@ SOURCES_C = \
 @HAVE_OCAML_TRUE@      $(LIBXML2_CFLAGS) \
 @HAVE_OCAML_TRUE@      $(LIBGUESTFS_CFLAGS) \
 @HAVE_OCAML_TRUE@      $(JANSSON_CFLAGS) \
+@HAVE_OCAML_TRUE@      $(LIBOSINFO_CFLAGS) \
 @HAVE_OCAML_TRUE@      -fPIC
 
 @HAVE_OCAML_TRUE@BOBJECTS = $(SOURCES_ML:.ml=.cmo)
@@ -902,6 +914,7 @@ SOURCES_C = \
 @HAVE_OCAML_TRUE@      $(LIBVIRT_LIBS) \
 @HAVE_OCAML_TRUE@      $(LIBXML2_LIBS) \
 @HAVE_OCAML_TRUE@      $(JANSSON_LIBS) \
+@HAVE_OCAML_TRUE@      $(LIBOSINFO_LIBS) \
 @HAVE_OCAML_TRUE@      $(LIBINTL) \
 @HAVE_OCAML_TRUE@      -lgnu
 
@@ -1191,6 +1204,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getopt_tests-dummy.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmltools_a-JSON_parser-c.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmltools_a-getopt-c.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmltools_a-libosinfo-c.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmltools_a-tools_utils-c.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libmltools_a-uri-c.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/machine_readable_tests-dummy.Po@am__quote@ # am--include-marker
@@ -1297,6 +1311,20 @@ libmltools_a-JSON_parser-c.obj: JSON_parser-c.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmltools_a_CPPFLAGS) $(CPPFLAGS) $(libmltools_a_CFLAGS) $(CFLAGS) -c -o libmltools_a-JSON_parser-c.obj `if test -f 'JSON_parser-c.c'; then $(CYGPATH_W) 'JSON_parser-c.c'; else $(CYGPATH_W) '$(srcdir)/JSON_parser-c.c'; fi`
 
+libmltools_a-libosinfo-c.o: libosinfo-c.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmltools_a_CPPFLAGS) $(CPPFLAGS) $(libmltools_a_CFLAGS) $(CFLAGS) -MT libmltools_a-libosinfo-c.o -MD -MP -MF $(DEPDIR)/libmltools_a-libosinfo-c.Tpo -c -o libmltools_a-libosinfo-c.o `test -f 'libosinfo-c.c' || echo '$(srcdir)/'`libosinfo-c.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libmltools_a-libosinfo-c.Tpo $(DEPDIR)/libmltools_a-libosinfo-c.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='libosinfo-c.c' object='libmltools_a-libosinfo-c.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmltools_a_CPPFLAGS) $(CPPFLAGS) $(libmltools_a_CFLAGS) $(CFLAGS) -c -o libmltools_a-libosinfo-c.o `test -f 'libosinfo-c.c' || echo '$(srcdir)/'`libosinfo-c.c
+
+libmltools_a-libosinfo-c.obj: libosinfo-c.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmltools_a_CPPFLAGS) $(CPPFLAGS) $(libmltools_a_CFLAGS) $(CFLAGS) -MT libmltools_a-libosinfo-c.obj -MD -MP -MF $(DEPDIR)/libmltools_a-libosinfo-c.Tpo -c -o libmltools_a-libosinfo-c.obj `if test -f 'libosinfo-c.c'; then $(CYGPATH_W) 'libosinfo-c.c'; else $(CYGPATH_W) '$(srcdir)/libosinfo-c.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libmltools_a-libosinfo-c.Tpo $(DEPDIR)/libmltools_a-libosinfo-c.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='libosinfo-c.c' object='libmltools_a-libosinfo-c.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmltools_a_CPPFLAGS) $(CPPFLAGS) $(libmltools_a_CFLAGS) $(CFLAGS) -c -o libmltools_a-libosinfo-c.obj `if test -f 'libosinfo-c.c'; then $(CYGPATH_W) 'libosinfo-c.c'; else $(CYGPATH_W) '$(srcdir)/libosinfo-c.c'; fi`
+
 libmltools_a-tools_utils-c.o: tools_utils-c.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libmltools_a_CPPFLAGS) $(CPPFLAGS) $(libmltools_a_CFLAGS) $(CFLAGS) -MT libmltools_a-tools_utils-c.o -MD -MP -MF $(DEPDIR)/libmltools_a-tools_utils-c.Tpo -c -o libmltools_a-tools_utils-c.o `test -f 'tools_utils-c.c' || echo '$(srcdir)/'`tools_utils-c.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libmltools_a-tools_utils-c.Tpo $(DEPDIR)/libmltools_a-tools_utils-c.Po
@@ -1740,6 +1768,7 @@ distclean: distclean-am
        -rm -f ./$(DEPDIR)/getopt_tests-dummy.Po
        -rm -f ./$(DEPDIR)/libmltools_a-JSON_parser-c.Po
        -rm -f ./$(DEPDIR)/libmltools_a-getopt-c.Po
+       -rm -f ./$(DEPDIR)/libmltools_a-libosinfo-c.Po
        -rm -f ./$(DEPDIR)/libmltools_a-tools_utils-c.Po
        -rm -f ./$(DEPDIR)/libmltools_a-uri-c.Po
        -rm -f ./$(DEPDIR)/machine_readable_tests-dummy.Po
@@ -1798,6 +1827,7 @@ maintainer-clean: maintainer-clean-am
        -rm -f ./$(DEPDIR)/getopt_tests-dummy.Po
        -rm -f ./$(DEPDIR)/libmltools_a-JSON_parser-c.Po
        -rm -f ./$(DEPDIR)/libmltools_a-getopt-c.Po
+       -rm -f ./$(DEPDIR)/libmltools_a-libosinfo-c.Po
        -rm -f ./$(DEPDIR)/libmltools_a-tools_utils-c.Po
        -rm -f ./$(DEPDIR)/libmltools_a-uri-c.Po
        -rm -f ./$(DEPDIR)/machine_readable_tests-dummy.Po
diff --git a/common/mltools/libosinfo-c.c b/common/mltools/libosinfo-c.c
new file mode 100644 (file)
index 0000000..93357fd
--- /dev/null
@@ -0,0 +1,346 @@
+/* virt-v2v
+ * Copyright (C) 2020 Red Hat Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+/**
+ * Mini interface to libosinfo.
+ */
+
+#include <config.h>
+
+#include <osinfo/osinfo.h>
+
+#include <caml/alloc.h>
+#include <caml/callback.h>
+#include <caml/fail.h>
+#include <caml/memory.h>
+#include <caml/mlvalues.h>
+#include <caml/custom.h>
+
+#include <stdio.h>
+
+#pragma GCC diagnostic ignored "-Wmissing-prototypes"
+
+#define MAKE_VERSION_HEX(maj, min, mic) \
+    (((maj) << 16) | ((min) <<  8) | ((mic) << 0))
+#define V2V_LIBOSINFO_VERSION_HEX \
+    MAKE_VERSION_HEX(OSINFO_MAJOR_VERSION, OSINFO_MINOR_VERSION, OSINFO_MICRO_VERSION)
+#define IS_LIBOSINFO_VERSION(maj, min, mic) \
+    (V2V_LIBOSINFO_VERSION_HEX >= MAKE_VERSION_HEX(maj, min, mic))
+
+/*
+ * libosinfo 1.8.0 provides auto-cleanup functions for all its classes,
+ * so avoid declaring our own.
+ */
+#if !IS_LIBOSINFO_VERSION(1, 8, 0)
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(OsinfoFilter, g_object_unref)
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(OsinfoLoader, g_object_unref)
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(OsinfoOsList, g_object_unref)
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(OsinfoDeviceList, g_object_unref)
+#endif
+
+typedef OsinfoDb *OsinfoDb_t;
+typedef OsinfoOs *OsinfoOs_t;
+
+/* Wrap and unwrap handles, with a finalizer. */
+#define OsinfoDb_t_val(rv) (*(OsinfoDb_t *)Data_custom_val(rv))
+
+#define _OsinfoOs_t_val(rv) (*((OsinfoOs_t *)Data_custom_val(rv)))
+#define OsinfoOs_t_val(rv) _OsinfoOs_t_val(Field((rv),0))
+
+static void
+OsinfoDb_t_finalize (value tv)
+{
+  OsinfoDb_t t = OsinfoDb_t_val (tv);
+  if (t) g_object_unref (t);
+}
+
+static struct custom_operations db_custom_operations = {
+  (char *) "OsinfoDb_t_custom_operations",
+  OsinfoDb_t_finalize,
+  custom_compare_default,
+  custom_hash_default,
+  custom_serialize_default,
+  custom_deserialize_default,
+  custom_compare_ext_default,
+};
+
+static value
+Val_OsinfoDb_t (OsinfoDb_t t)
+{
+  CAMLparam0 ();
+  CAMLlocal1 (rv);
+
+  rv = caml_alloc_custom (&db_custom_operations,
+                          sizeof (OsinfoDb_t), 0, 1);
+  OsinfoDb_t_val(rv) = t;
+
+  CAMLreturn (rv);
+}
+
+static struct custom_operations os_custom_operations = {
+  (char *) "OsinfoOs_t_custom_operations",
+  custom_finalize_default,
+  custom_compare_default,
+  custom_hash_default,
+  custom_serialize_default,
+  custom_deserialize_default,
+  custom_compare_ext_default,
+};
+
+static value
+Val_OsinfoOs_t (value dbv, OsinfoOs *os)
+{
+  CAMLparam1 (dbv);
+  CAMLlocal2 (rv, v);
+
+  v = caml_alloc_custom (&os_custom_operations,
+                         sizeof(OsinfoOs_t), 0, 1);
+  _OsinfoOs_t_val (v) = os;
+  rv = caml_alloc_tuple (2);
+  Store_field (rv, 0, v);
+  Store_field (rv, 1, dbv);
+
+  CAMLreturn (rv);
+}
+
+value
+v2v_osinfo_db_load (value unitv)
+{
+  CAMLparam1 (unitv);
+  CAMLlocal2 (rv, errv);
+  g_autoptr(OsinfoLoader) loader = NULL;
+  OsinfoDb *db = NULL;
+  g_autoptr(GError) error = NULL;
+
+  loader = osinfo_loader_new ();
+  osinfo_loader_process_default_path (loader, &error);
+  if (error != NULL) {
+    char *err;
+
+    if (asprintf (&err, "libosinfo error: "
+                  "osinfo_loader_process_default_path: %s",
+                  error->message) >= 0) {
+      errv = caml_copy_string (err);
+      free (err);
+    }
+    else
+      errv = caml_copy_string ("osinfo_loader_process_default_path failed");
+
+    caml_failwith_value (errv);
+  }
+
+  db = osinfo_loader_get_db (loader);
+  g_object_ref (db);
+
+  rv = Val_OsinfoDb_t (db);
+
+  CAMLreturn (rv);
+}
+
+value
+v2v_osinfo_os_find_os_by_short_id (value dbv, value osv)
+{
+  CAMLparam2 (dbv, osv);
+  CAMLlocal1 (rv);
+  g_autoptr(OsinfoFilter) filter = NULL;
+  g_autoptr(OsinfoOsList) os_list = NULL;
+  OsinfoList *list;
+  OsinfoOs *os;
+
+  os_list = osinfo_db_get_os_list (OsinfoDb_t_val (dbv));
+  filter = osinfo_filter_new ();
+  osinfo_filter_add_constraint (filter, OSINFO_PRODUCT_PROP_SHORT_ID, String_val (osv));
+  list = osinfo_list_new_filtered (OSINFO_LIST(os_list), filter);
+
+  if (osinfo_list_get_length (list) == 0) {
+    g_object_unref (list);
+    caml_raise_not_found ();
+  }
+
+  os = OSINFO_OS(osinfo_list_get_nth (list, 0));
+  rv = Val_OsinfoOs_t (dbv, os);
+  g_object_unref (list);
+
+  CAMLreturn (rv);
+}
+
+value
+v2v_osinfo_os_get_id (value osv)
+{
+  CAMLparam1 (osv);
+  CAMLlocal1 (copyv);
+  const gchar *id;
+
+  id = osinfo_entity_get_id (OSINFO_ENTITY(OsinfoOs_t_val (osv)));
+  copyv = caml_copy_string (id);
+  CAMLreturn (copyv);
+}
+
+static value
+glist_to_value_list (GList *list)
+{
+  CAMLparam0 ();
+  CAMLlocal3 (rv, v, copyv);
+  GList *l;
+
+  rv = Val_emptylist;
+  for (l = list; l != NULL; l = l->next) {
+    v = caml_alloc (2, 0);
+    copyv = caml_copy_string (l->data);
+    Store_field (v, 0, copyv);
+    Store_field (v, 1, rv);
+    rv = v;
+  }
+
+  CAMLreturn (rv);
+}
+
+/* Collect OsinfoDevice properties from two levels:
+ *
+ * - The OSINFO_ENTITY_PROP_ID property, originating from the OsinfoEntity base
+ *   class. This is a unique URI, identifying the device.
+ *
+ * - All currently known OSINFO_DEVICE_PROP_* properties, originating from the
+ *   OsinfoDevice class.
+ *
+ * All of the above properties have string values. Thus, for uniformity, access
+ * all these properties by their names at the OsinfoEntity level (i.e., forego
+ * the class- and property-specific, dedicated property getter functions).
+ */
+static const char * const device_prop[] = {
+  OSINFO_ENTITY_PROP_ID,
+  OSINFO_DEVICE_PROP_VENDOR,
+  OSINFO_DEVICE_PROP_VENDOR_ID,
+  OSINFO_DEVICE_PROP_PRODUCT,
+  OSINFO_DEVICE_PROP_PRODUCT_ID,
+  OSINFO_DEVICE_PROP_NAME,
+  OSINFO_DEVICE_PROP_CLASS,
+  OSINFO_DEVICE_PROP_BUS_TYPE,
+  OSINFO_DEVICE_PROP_SUBSYSTEM,
+};
+#define NUM_DEVICE_PROPS (sizeof device_prop / sizeof device_prop[0])
+
+static value
+v2v_osinfo_device_list_to_value_list (OsinfoDeviceList *dev_list)
+{
+  CAMLparam0 ();
+  CAMLlocal4 (retvalv, linkv, propsv, copyv);
+  OsinfoList *ent_list;
+  gint ent_nr;
+
+  retvalv = Val_emptylist;
+  ent_list = OSINFO_LIST (dev_list);
+  ent_nr = osinfo_list_get_length (ent_list);
+
+  while (ent_nr > 0) {
+    OsinfoEntity *ent;
+    size_t prop_nr;
+
+    --ent_nr;
+    ent = osinfo_list_get_nth (ent_list, ent_nr);
+
+    propsv = caml_alloc (NUM_DEVICE_PROPS, 0);
+    for (prop_nr = 0; prop_nr < NUM_DEVICE_PROPS; ++prop_nr) {
+      const gchar *prop_val;
+
+      prop_val = osinfo_entity_get_param_value (ent, device_prop[prop_nr]);
+      if (prop_val == NULL)
+        prop_val = "";
+      copyv = caml_copy_string (prop_val);
+      Store_field (propsv, prop_nr, copyv);
+    }
+
+    linkv = caml_alloc (2, 0);
+    Store_field (linkv, 0, propsv);
+    Store_field (linkv, 1, retvalv);
+    retvalv = linkv;
+  }
+
+  CAMLreturn (retvalv);
+}
+
+value
+v2v_osinfo_os_get_device_drivers (value osv)
+{
+  CAMLparam1 (osv);
+  CAMLlocal4 (rv, v, vi, copyv);
+  OsinfoDeviceDriverList *list;
+  gint i, len;
+
+  list = osinfo_os_get_device_drivers (OsinfoOs_t_val (osv));
+  len = osinfo_list_get_length (OSINFO_LIST(list));
+
+  rv = Val_emptylist;
+  for (i = len - 1; i >= 0; --i) {
+    OsinfoDeviceDriver *driver;
+    const gchar *str;
+    gboolean b;
+    GList *l;
+    gint64 i64;
+    OsinfoDeviceList *dev_list;
+
+    driver = OSINFO_DEVICE_DRIVER(osinfo_list_get_nth (OSINFO_LIST(list), i));
+
+    vi = caml_alloc (6, 0);
+    str = osinfo_device_driver_get_architecture (driver);
+    copyv = caml_copy_string (str);
+    Store_field (vi, 0, copyv);
+    str = osinfo_device_driver_get_location (driver);
+    copyv = caml_copy_string (str);
+    Store_field (vi, 1, copyv);
+    b = osinfo_device_driver_get_pre_installable (driver);
+    Store_field (vi, 2, Val_bool (b));
+    b = osinfo_device_driver_get_signed (driver);
+    Store_field (vi, 3, Val_bool (b));
+#if IS_LIBOSINFO_VERSION(1, 7, 0)
+    i64 = osinfo_device_driver_get_priority (driver);
+#else
+    /* Same as OSINFO_DEVICE_DRIVER_DEFAULT_PRIORITY in libosinfo 1.7.0+. */
+    i64 = 50;
+#endif
+    copyv = caml_copy_int64 (i64);
+    Store_field (vi, 4, copyv);
+    l = osinfo_device_driver_get_files (driver);
+    Store_field (vi, 5, glist_to_value_list (l));
+    g_list_free (l);
+    dev_list = osinfo_device_driver_get_devices (driver);
+    v = (dev_list == NULL) ?
+        Val_emptylist :
+        v2v_osinfo_device_list_to_value_list (dev_list);
+    Store_field (vi, 6, v);
+
+    v = caml_alloc (2, 0);
+    Store_field (v, 0, vi);
+    Store_field (v, 1, rv);
+    rv = v;
+  }
+
+  CAMLreturn (rv);
+}
+
+value
+v2v_osinfo_os_get_all_devices (value osv)
+{
+  CAMLparam1 (osv);
+  CAMLlocal1 (retvalv);
+  g_autoptr (OsinfoDeviceList) dev_list = NULL;
+
+  dev_list = osinfo_os_get_all_devices (OsinfoOs_t_val (osv), NULL);
+  retvalv = v2v_osinfo_device_list_to_value_list (dev_list);
+  CAMLreturn (retvalv);
+}
diff --git a/common/mltools/libosinfo.ml b/common/mltools/libosinfo.ml
new file mode 100644 (file)
index 0000000..8ea0a27
--- /dev/null
@@ -0,0 +1,68 @@
+(* virt-v2v
+ * Copyright (C) 2020 Red Hat Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *)
+
+open Std_utils
+open Tools_utils
+open Common_gettext.Gettext
+
+type osinfo_db_t
+type osinfo_os_t
+
+type osinfo_device = {
+  id : string;
+  vendor : string;
+  vendor_id : string;
+  product : string;
+  product_id : string;
+  name : string;
+  class_ : string;
+  bus_type : string;
+  subsystem : string;
+}
+
+type osinfo_device_driver = {
+  architecture : string;
+  location : string;
+  pre_installable : bool;
+  signed : bool;
+  priority : int64;
+  files : string list;
+  devices : osinfo_device list;
+}
+
+external osinfo_os_get_id : osinfo_os_t -> string = "v2v_osinfo_os_get_id"
+external osinfo_os_get_device_drivers : osinfo_os_t -> osinfo_device_driver list = "v2v_osinfo_os_get_device_drivers"
+external osinfo_os_get_devices : osinfo_os_t -> osinfo_device list = "v2v_osinfo_os_get_all_devices"
+
+class osinfo_os h =
+  object (self)
+    method get_id () = osinfo_os_get_id h
+    method get_device_drivers () = osinfo_os_get_device_drivers h
+    method get_devices () = osinfo_os_get_devices h
+end
+
+external osinfo_db_load : unit -> osinfo_db_t = "v2v_osinfo_db_load"
+external osinfo_db_find_os_by_short_id : osinfo_db_t -> string -> osinfo_os_t = "v2v_osinfo_os_find_os_by_short_id"
+
+class osinfo_db () =
+  let h = osinfo_db_load () in
+  object (self)
+    method find_os_by_short_id name =
+      let os = osinfo_db_find_os_by_short_id h name in
+      new osinfo_os os
+end
diff --git a/common/mltools/libosinfo.mli b/common/mltools/libosinfo.mli
new file mode 100644 (file)
index 0000000..aa43637
--- /dev/null
@@ -0,0 +1,63 @@
+(* virt-v2v
+ * Copyright (C) 2020 Red Hat Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *)
+
+(** This module implements a minimal libosinfo API. *)
+
+type osinfo_os_t
+
+type osinfo_device = {
+  id : string;
+  vendor : string;
+  vendor_id : string;
+  product : string;
+  product_id : string;
+  name : string;
+  class_ : string;
+  bus_type : string;
+  subsystem : string;
+}
+
+type osinfo_device_driver = {
+  architecture : string;
+  location : string;
+  pre_installable : bool;
+  signed : bool;
+  priority : int64;
+  files : string list;
+  devices : osinfo_device list;
+}
+
+class osinfo_os : osinfo_os_t -> object
+  method get_id : unit -> string
+  (** Return the ID. *)
+  method get_device_drivers : unit -> osinfo_device_driver list
+  (** Return the list of device drivers. *)
+  method get_devices : unit -> osinfo_device list
+  (** Return the list of devices. *)
+end
+(** Minimal OsinfoOs wrapper. *)
+
+class osinfo_db : unit -> object
+  method find_os_by_short_id : string -> osinfo_os
+  (** [find_os_by_short_id short-id] get the [osinfo_os] that has the
+      specified [short-id].
+
+      Raise [Not_found] in case there is no matching OS.
+   *)
+end
+(** Minimal OsinfoDb wrapper. *)
diff --git a/common/mltools/libosinfo_utils.ml b/common/mltools/libosinfo_utils.ml
new file mode 100644 (file)
index 0000000..8504e2b
--- /dev/null
@@ -0,0 +1,133 @@
+(* virt-v2v
+ * Copyright (C) 2020 Red Hat Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *)
+
+open Std_utils
+open Tools_utils
+open Common_gettext.Gettext
+
+(* Singleton DB, created on the first access. *)
+let db = lazy (new Libosinfo.osinfo_db ())
+(*
+ * Helper function to get the DB -- use it as sole way to get the DB.
+ *)
+let get_db () =
+  Lazy.force db
+
+let get_os_by_short_id os =
+  let os = (get_db ())#find_os_by_short_id os in
+  debug "libosinfo: loaded OS: %s" (os#get_id ());
+  os
+
+let string_of_osinfo_device_list dev_list =
+
+  (* Turn the fields of an "osinfo_device" record into a list. *)
+  let listify { Libosinfo.id; vendor; vendor_id; product; product_id; name;
+                class_; bus_type; subsystem } =
+    [ id; vendor; vendor_id; product; product_id; name;
+      class_; bus_type; subsystem ]
+
+  (* Given a list of strings, and a list of previously known maximum widths,
+   * "increase" each width, if necessary, to the length of the corresponding
+   * string.
+   *)
+  and grow_widths = List.map2 (fun s -> max (String.length s))
+  in
+
+  (* Compute the maximum width for each field in "dev_list". *)
+  let max_widths =
+    List.fold_right grow_widths (List.map listify dev_list)
+      [ 0; 0; 0; 0; 0; 0; 0; 0; 0 ]
+
+  (* Given a list of strings and a list of field widths, format "string1 |
+   * string2 | ... | stringN" such that each field is right-padded to the
+   * corresponding width.
+   *)
+  and columnate strings widths =
+    String.concat " | " (List.map2 (Printf.sprintf "%-*s") widths strings)
+  in
+
+  (* Format "dev_list" as a table by (a) printing one "osinfo_device" record
+   * per line, and (b) right-padding each field of each "osinfo_device" record
+   * to the maximum width of that field.
+   *)
+  String.concat "\n"
+    (List.map (fun dev -> columnate (listify dev) max_widths) dev_list)
+
+let string_of_osinfo_device_driver { Libosinfo.architecture; location;
+                                     pre_installable; signed; priority;
+                                     files; devices } =
+  Printf.sprintf "%s: [%s, %s, %s, priority %Ld]\nFiles:\n%s\nDevices:\n%s"
+    location architecture
+    (if pre_installable then "pre-installable" else "not pre-installable")
+    (if signed then "signed" else "unsigned")
+    priority
+    (String.concat "\n" files)
+    (string_of_osinfo_device_list devices)
+
+let best_driver drivers arch =
+  let debug_drivers =
+    List.iter (fun d -> debug "Driver: %s" (string_of_osinfo_device_driver d))
+  (* The architecture that "inspect.i_arch" from libguestfs
+   * ("daemon/filearch.ml") calls "i386", the osinfo-db schema
+   * ("data/schema/osinfo.rng.in") calls "i686".
+   *)
+  and arch = if arch = "i386" then "i686" else arch in
+  debug "libosinfo drivers before filtering:";
+  debug_drivers drivers;
+  let drivers =
+    List.filter (
+      fun { Libosinfo.architecture; location; pre_installable } ->
+        if architecture <> arch || not pre_installable then
+          false
+        else
+          try
+            (match Xml.parse_uri location with
+            | { Xml.uri_scheme = Some scheme;
+                Xml.uri_path = Some _ } when scheme = "file" -> true
+            | _ -> false
+            )
+          with Invalid_argument _ -> false
+    ) drivers in
+  debug "libosinfo drivers after filtering:";
+  debug_drivers drivers;
+  let drivers =
+    List.sort (
+      fun { Libosinfo.priority = prioA } { Libosinfo.priority = prioB } ->
+        compare prioB prioA
+    ) drivers in
+  if drivers = [] then
+    raise Not_found;
+  List.hd drivers
+
+type os_support = {
+  q35 : bool;
+  vio10 : bool;
+}
+
+let os_support_of_osinfo_device_list =
+  let rec next accu left =
+    match accu, left with
+    | { q35 = true; vio10 = true }, _
+    | _ , [] ->
+      accu
+    | { q35; vio10 }, { Libosinfo.id } :: tail ->
+      let q35 = q35 || id = "http://qemu.org/chipset/x86/q35"
+      and vio10 = vio10 || id = "http://pcisig.com/pci/1af4/1041" in
+      next { q35; vio10 } tail
+  in
+  next { q35 = false; vio10 = false }
diff --git a/common/mltools/libosinfo_utils.mli b/common/mltools/libosinfo_utils.mli
new file mode 100644 (file)
index 0000000..14991bc
--- /dev/null
@@ -0,0 +1,58 @@
+(* virt-v2v
+ * Copyright (C) 2020 Red Hat Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *)
+
+(** This module implements helper functions based on libosinfo. *)
+
+val get_os_by_short_id : string -> Libosinfo.osinfo_os
+(** [get_os_by_short_id short-id] get the [Libosinfo.osinfo_os]
+    that has the specified [short-id].
+
+    Raise [Not_found] in case there is no matching OS.
+ *)
+
+val string_of_osinfo_device_list : Libosinfo.osinfo_device list -> string
+(** Convert an [osinfo_device] list to a printable string for debugging. *)
+
+val string_of_osinfo_device_driver : Libosinfo.osinfo_device_driver -> string
+(** Convert a [osinfo_device_driver] to a printable string for debugging. *)
+
+val best_driver : Libosinfo.osinfo_device_driver list ->
+                  string ->
+                  Libosinfo.osinfo_device_driver
+(** [best_driver drivers arch] picks the best driver from [drivers] as follows:
+    - filters out drivers that:
+      - target a different architecture,
+      - are not pre-installable,
+      - have an invalid or non-local URL;
+    - sorts the remaining drivers by priority, like libosinfo does;
+    - picks the top driver of the sorted list.
+    Raises Not_found if no driver in [drivers] survives filtering. *)
+
+type os_support = {
+  q35 : bool;
+  vio10 : bool;
+}
+(** Tell whether the operating system supports the Q35 board type and/or
+    non-transitional (virtio-1.0-only) virtio devices. (Internally, the
+    virtio-1.0-net device is used as a proxy for the general statement about
+    virtio-1.0.)
+ *)
+
+val os_support_of_osinfo_device_list : Libosinfo.osinfo_device list ->
+                                       os_support
+(** Get [os_support] from an [osinfo_device] list. *)
index 53ccb68ab0ce9b67998b4048edd1ab62dfa0503e..f8ef74e1e5c20e23bee5385f9297d7afe037e75a 100644 (file)
@@ -23,39 +23,39 @@ open Common_gettext.Gettext
 open Unix
 open Printf
 
-(* List of files to unlink. *)
-let files = ref []
+type action =
+  | Unlink of string     (* filename *)
+  | Rm_rf of string      (* directory *)
+  | Kill of int * int    (* signal, pid *)
+  | Fn of (unit -> unit) (* generic function *)
 
-(* List of directories to remove. *)
-let rmdirs = ref []
-
-(* List of PIDs to kill. *)
-let kills = ref []
-
-(* List of functions to call. *)
-let fns = ref []
+(* List of (priority, action). *)
+let actions = ref []
 
 (* Perform a single exit action, printing any exception but
  * otherwise ignoring failures.
  *)
-let do_action f arg =
-  try f arg with exn -> debug "%s" (Printexc.to_string exn)
+let do_action action =
+  try
+    match action with
+    | Unlink file -> Unix.unlink file
+    | Rm_rf dir ->
+       let cmd = sprintf "rm -rf -- %s" (Filename.quote dir) in
+       ignore (Tools_utils.shell_command cmd)
+    | Kill (signal, pid) ->
+       kill pid signal
+    | Fn f -> f ()
+  with exn -> debug "%s" (Printexc.to_string exn)
 
 (* Make sure the actions are performed only once. *)
 let done_actions = ref false
 
-(* Perform the exit actions. *)
+(* Perform the exit actions in priority order (lowest prio first). *)
 let do_actions () =
   if not !done_actions then (
-    List.iter (do_action (fun f -> f ())) !fns;
-    List.iter (do_action (fun (signal, pid) -> kill pid signal)) !kills;
-    List.iter (do_action (fun file -> Unix.unlink file)) !files;
-    List.iter (do_action (
-      fun dir ->
-        let cmd = sprintf "rm -rf %s" (Filename.quote dir) in
-        ignore (Tools_utils.shell_command cmd)
-      )
-    ) !rmdirs;
+    let actions = List.sort (fun (a, _) (b, _) -> compare a b) !actions in
+    let actions = List.map snd actions in
+    List.iter do_action actions
   );
   done_actions := true
 
@@ -94,18 +94,18 @@ let register () =
   );
   registered := true
 
-let f fn =
+let f ?(prio = 5000) fn =
   register ();
-  List.push_front fn fns
+  List.push_front (prio, Fn fn) actions
 
-let unlink filename =
+let unlink ?(prio = 5000) filename =
   register ();
-  List.push_front filename files
+  List.push_front (prio, Unlink filename) actions
 
-let rmdir dir =
+let rm_rf ?(prio = 5000) dir =
   register ();
-  List.push_front dir rmdirs
+  List.push_front (prio, Rm_rf dir) actions
 
-let kill ?(signal = Sys.sigterm) pid =
+let kill ?(prio = 5000) ?(signal = Sys.sigterm) pid =
   register ();
-  List.push_front (signal, pid) kills
+  List.push_front (prio, Kill (signal, pid)) actions
index a02e3db36fc6dbc7aef0bb974be708b60bd07d5a..e19f169de6e1b40339e5fcdd27da486e745368d5 100644 (file)
@@ -1,5 +1,5 @@
 (* Common way to handle actions on exit.
- * Copyright (C) 2010-2021 Red Hat Inc.
+ * Copyright (C) 2010-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
     killing another process, so we provide simple
     wrappers for those common actions here.
 
+    Actions can be ordered by setting the optional [?prio]
+    parameter in the range 0..9999.  By default actions
+    have priority 5000.  Lower numbered actions run first.
+    Higher numbered actions run last.  So to have an action
+    run at the very end before exit you might use [~prio:9999]
+
     Note this module registers signal handlers for
     SIGINT, SIGQUIT, SIGTERM and SIGHUP.  This means
     that any program that links with mltools.cmxa
     Your cleanup action might no longer run unless the
     program calls {!Stdlib.exit}. *)
 
-val f : (unit -> unit) -> unit
+val f : ?prio:int -> (unit -> unit) -> unit
 (** Register a function [f] which runs when the program exits.
     Similar to [Stdlib.at_exit] but also runs if the program is
-    killed with a signal that we can catch. *)
+    killed with a signal that we can catch.
+
+    [?prio] is the priority, default 5000.  See the description above. *)
 
-val unlink : string -> unit
+val unlink : ?prio:int -> string -> unit
 (** Unlink a single temporary file on exit. *)
 
-val rmdir : string -> unit
+val rm_rf : ?prio:int -> string -> unit
 (** Recursively remove a temporary directory on exit (using [rm -rf]). *)
 
-val kill : ?signal:int -> int -> unit
+val kill : ?prio:int -> ?signal:int -> int -> unit
 (** Kill [PID] on exit.  The signal sent defaults to [Sys.sigterm].
 
     Use this with care since you can end up unintentionally killing
index 081466776666978edf0ac27134ac3a5f7b1eee9a..4ff42e5d5f7f3e46a1a23c7b0227d0c1332d2cc9 100644 (file)
@@ -62,24 +62,31 @@ guestfs_int_mllib_inspect_decrypt (value gv, value gpv, value keysv)
       caml_raise_out_of_memory ();
 
     v = Field (elemv, 1);
-    switch (Tag_val (v)) {
-    case 0:  /* KeyString of string */
-      key.type = key_string;
-      key.string.s = strdup (String_val (Field (v, 0)));
-      if (!key.string.s)
-        caml_raise_out_of_memory ();
-      break;
-    case 1:  /* KeyFileName of string */
-      key.type = key_file;
-      key.file.name = strdup (String_val (Field (v, 0)));
-      if (!key.file.name)
-        caml_raise_out_of_memory ();
-      break;
-    default:
-      error (EXIT_FAILURE, 0,
-             "internal error: unhandled Tag_val (v) = %d",
-             Tag_val (v));
-    }
+    if (Is_block (v))
+      switch (Tag_val (v)) {
+      case 0:  /* KeyString of string */
+        key.type = key_string;
+        key.string.s = strdup (String_val (Field (v, 0)));
+        if (!key.string.s)
+          caml_raise_out_of_memory ();
+        break;
+      case 1:  /* KeyFileName of string */
+        key.type = key_file;
+        key.file.name = strdup (String_val (Field (v, 0)));
+        if (!key.file.name)
+          caml_raise_out_of_memory ();
+        break;
+      default:
+        abort ();
+      }
+    else
+      switch (Int_val (v)) {
+      case 0:  /* KeyClevis */
+        key.type = key_clevis;
+        break;
+      default:
+        abort ();
+      }
 
     ks = key_store_import_key (ks, &key);
 
index 695fda7e548c8b8e263c233fb1465da331e729dd..562bfadc18a8af036793a3e8a96bdb1bff83fbdb 100644 (file)
@@ -29,11 +29,12 @@ open Getopt.OptionName
 let prog = ref prog
 
 type key_store = {
-  keys : (string, key_store_key) Hashtbl.t;
+  keys : (string * key_store_key) list ref;
 }
 and key_store_key =
   | KeyString of string
   | KeyFileName of string
+  | KeyClevis
 
 external c_inspect_decrypt : Guestfs.t -> int64 -> (string * key_store_key) list -> unit = "guestfs_int_mllib_inspect_decrypt"
 external c_set_echo_keys : unit -> unit = "guestfs_int_mllib_set_echo_keys" [@@noalloc]
@@ -376,7 +377,7 @@ let create_standard_options argspec ?anon_fun ?(key_opts = false)
       )
   in
   let ks = {
-    keys = Hashtbl.create 13;
+    keys = ref [];
   } in
   let argspec = ref argspec in
   let add_argspec = List.push_back argspec in
@@ -392,14 +393,28 @@ let create_standard_options argspec ?anon_fun ?(key_opts = false)
 
   if key_opts then (
     let parse_key_selector arg =
-      let parts = String.nsplit ~max:3 ":" arg in
+      let parts = String.nsplit ":" arg in
       match parts with
+      | [] ->
+        error (f_"selector '%s': missing ID") arg
+      | [ _ ] ->
+        error (f_"selector '%s': missing TYPE") arg
+      | [ _; "key" ]
+      |  _ :: "key" :: _ :: _ :: _ ->
+        error (f_"selector '%s': missing KEY_STRING, or too many fields") arg
       | [ device; "key"; key ] ->
-         Hashtbl.replace ks.keys device (KeyString key)
+         List.push_back ks.keys (device, KeyString key)
+      | [ _; "file" ]
+      |  _ :: "file" :: _ :: _ :: _ ->
+        error (f_"selector '%s': missing FILENAME, or too many fields") arg
       | [ device; "file"; file ] ->
-         Hashtbl.replace ks.keys device (KeyFileName file)
+         List.push_back ks.keys (device, KeyFileName file)
+      |  _ :: "clevis" :: _ :: _ ->
+        error (f_"selector '%s': too many fields") arg
+      | [ device; "clevis" ] ->
+         List.push_back ks.keys (device, KeyClevis)
       | _ ->
-         error (f_"invalid selector string for --key: %s") arg
+         error (f_"selector '%s': invalid TYPE") arg
     in
 
     add_argspec ([ L"echo-keys" ],       Getopt.Unit c_set_echo_keys,       s_"Don’t turn off echo for passphrases");
@@ -420,16 +435,6 @@ let create_standard_options argspec ?anon_fun ?(key_opts = false)
   let getopt = Getopt.create argspec ?anon_fun usage_msg in
   { getopt; ks; debug_gc }
 
-let key_store_to_cli { keys } =
-  Hashtbl.fold (
-    fun k v acc ->
-      let arg =
-        match v with
-        | KeyString s -> sprintf "%s:key:%s" k s
-        | KeyFileName f -> sprintf "%s:file:%s" k f in
-      "--key" :: arg :: acc
-  ) keys []
-
 (* Run an external command, slurp up the output as a list of lines. *)
 let external_command ?(echo_cmd = true) cmd =
   if echo_cmd then
@@ -691,21 +696,19 @@ let is_btrfs_subvolume g fs =
     if g#last_errno () = Guestfs.Errno.errno_EINVAL then false
     else raise exn
 
+let key_store_requires_network ks =
+  List.exists (function
+               | _, KeyClevis -> true
+               | _ -> false) !(ks.keys)
+
 let inspect_decrypt g ks =
-  (* Turn the keys in the key_store into a simpler struct, so it is possible
-   * to read it using the C API.
-   *)
-  let keys_as_list = Hashtbl.fold (
-    fun k v acc ->
-      (k, v) :: acc
-  ) ks.keys [] in
   (* Note we pass original 'g' even though it is not used by the
    * callee.  This is so that 'g' is kept as a root on the stack, and
    * so cannot be garbage collected while we are in the c_inspect_decrypt
    * function.
    *)
   c_inspect_decrypt g#ocaml_handle (Guestfs.c_pointer g#ocaml_handle)
-    keys_as_list
+    !(ks.keys)
 
 let with_timeout op timeout ?(sleep = 2) fn =
   let start_t = Unix.gettimeofday () in
index 5018300650382f53e3d5c7669d369316d75da31e..ec900e6389bca3b698cbbc84c193986b37eeaf52 100644 (file)
@@ -103,14 +103,6 @@ val create_standard_options : Getopt.speclist -> ?anon_fun:Getopt.anon_fun -> ?k
 
     Returns a new {!cmdline_options} structure. *)
 
-val key_store_to_cli : key_store -> string list
-(** Convert a {!key_store} object back to a list of command line
-    options, essentially undoing the effect of Getopt parsing.
-    This is used in virt-v2v to pass the keystore to helpers.
-    It is not particularly secure, especially if you use the
-    [:key:] selector, although not any less secure than passing
-    them via the command line in the first place. *)
-
 val external_command : ?echo_cmd:bool -> string -> string list
 (** Run an external command, slurp up the output as a list of lines.
 
@@ -204,6 +196,10 @@ val inspect_mount_root_ro : Guestfs.guestfs -> string -> unit
 val is_btrfs_subvolume : Guestfs.guestfs -> string -> bool
 (** Checks if a filesystem is a btrfs subvolume. *)
 
+val key_store_requires_network : key_store -> bool
+(** [key_store_requires_network ks] returns [true] iff [ks] contains at least
+    one "ID:clevis" selector. *)
+
 val inspect_decrypt : Guestfs.guestfs -> key_store -> unit
 (** Simple implementation of decryption: look for any encrypted
     partitions and decrypt them, then rescan for VGs. *)
index d722265165acab989dd6de7acf6ee5dd56feb8c0..824a1cd740d0ca6eb397b3de8a46fa360188d422 100644 (file)
@@ -32,7 +32,7 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -492,7 +492,6 @@ EGREP = @EGREP@
 ETAGS = @ETAGS@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FILECMD = @FILECMD@
 GCC_VISIBILITY_HIDDEN = @GCC_VISIBILITY_HIDDEN@
 GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
 GMSGFMT = @GMSGFMT@
@@ -521,6 +520,8 @@ LIBINTL = @LIBINTL@
 LIBLZMA_CFLAGS = @LIBLZMA_CFLAGS@
 LIBLZMA_LIBS = @LIBLZMA_LIBS@
 LIBOBJS = @LIBOBJS@
+LIBOSINFO_CFLAGS = @LIBOSINFO_CFLAGS@
+LIBOSINFO_LIBS = @LIBOSINFO_LIBS@
 LIBS = @LIBS@
 LIBTINFO_CFLAGS = @LIBTINFO_CFLAGS@
 LIBTINFO_LIBS = @LIBTINFO_LIBS@
@@ -591,6 +592,7 @@ PO4A_TRANSLATE = @PO4A_TRANSLATE@
 PODWRAPPER = @PODWRAPPER@
 POSUB = @POSUB@
 RANLIB = @RANLIB@
+REALPATH = @REALPATH@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
index fc8ab2f2695d0f460d5c49e27ee2372a2891bcda..f9672cad04c658073c81ea3615d0aeb9f0343153 100644 (file)
@@ -32,7 +32,7 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -490,7 +490,6 @@ EGREP = @EGREP@
 ETAGS = @ETAGS@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FILECMD = @FILECMD@
 GCC_VISIBILITY_HIDDEN = @GCC_VISIBILITY_HIDDEN@
 GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
 GMSGFMT = @GMSGFMT@
@@ -519,6 +518,8 @@ LIBINTL = @LIBINTL@
 LIBLZMA_CFLAGS = @LIBLZMA_CFLAGS@
 LIBLZMA_LIBS = @LIBLZMA_LIBS@
 LIBOBJS = @LIBOBJS@
+LIBOSINFO_CFLAGS = @LIBOSINFO_CFLAGS@
+LIBOSINFO_LIBS = @LIBOSINFO_LIBS@
 LIBS = @LIBS@
 LIBTINFO_CFLAGS = @LIBTINFO_CFLAGS@
 LIBTINFO_LIBS = @LIBTINFO_LIBS@
@@ -589,6 +590,7 @@ PO4A_TRANSLATE = @PO4A_TRANSLATE@
 PODWRAPPER = @PODWRAPPER@
 POSUB = @POSUB@
 RANLIB = @RANLIB@
+REALPATH = @REALPATH@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
index 9f172fc9660c9569fce8ef100c616135be8b6912..6b3a20459f9b6848d27d4d37ce94e1b7604d4956 100644 (file)
@@ -32,7 +32,7 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -277,7 +277,6 @@ EGREP = @EGREP@
 ETAGS = @ETAGS@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FILECMD = @FILECMD@
 GCC_VISIBILITY_HIDDEN = @GCC_VISIBILITY_HIDDEN@
 GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
 GMSGFMT = @GMSGFMT@
@@ -306,6 +305,8 @@ LIBINTL = @LIBINTL@
 LIBLZMA_CFLAGS = @LIBLZMA_CFLAGS@
 LIBLZMA_LIBS = @LIBLZMA_LIBS@
 LIBOBJS = @LIBOBJS@
+LIBOSINFO_CFLAGS = @LIBOSINFO_CFLAGS@
+LIBOSINFO_LIBS = @LIBOSINFO_LIBS@
 LIBS = @LIBS@
 LIBTINFO_CFLAGS = @LIBTINFO_CFLAGS@
 LIBTINFO_LIBS = @LIBTINFO_LIBS@
@@ -376,6 +377,7 @@ PO4A_TRANSLATE = @PO4A_TRANSLATE@
 PODWRAPPER = @PODWRAPPER@
 POSUB = @POSUB@
 RANLIB = @RANLIB@
+REALPATH = @REALPATH@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
index 1d53c4c546963fc2abe01da49f8cae68156b808b..de5431bb780854828003e57010de8d92e8db4727 100644 (file)
@@ -32,7 +32,7 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -283,7 +283,6 @@ EGREP = @EGREP@
 ETAGS = @ETAGS@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FILECMD = @FILECMD@
 GCC_VISIBILITY_HIDDEN = @GCC_VISIBILITY_HIDDEN@
 GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
 GMSGFMT = @GMSGFMT@
@@ -312,6 +311,8 @@ LIBINTL = @LIBINTL@
 LIBLZMA_CFLAGS = @LIBLZMA_CFLAGS@
 LIBLZMA_LIBS = @LIBLZMA_LIBS@
 LIBOBJS = @LIBOBJS@
+LIBOSINFO_CFLAGS = @LIBOSINFO_CFLAGS@
+LIBOSINFO_LIBS = @LIBOSINFO_LIBS@
 LIBS = @LIBS@
 LIBTINFO_CFLAGS = @LIBTINFO_CFLAGS@
 LIBTINFO_LIBS = @LIBTINFO_LIBS@
@@ -382,6 +383,7 @@ PO4A_TRANSLATE = @PO4A_TRANSLATE@
 PODWRAPPER = @PODWRAPPER@
 POSUB = @POSUB@
 RANLIB = @RANLIB@
+REALPATH = @REALPATH@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
index 1cd7b627e264d9ec2f0352cf1be7b2d4a56918a6..0661d0f35e1608d5b611e04279e65adbcb2bdb8e 100644 (file)
 
 #include "options.h"
 
+#ifndef __clang__
+#pragma GCC diagnostic ignored "-Wstringop-overflow"
+#endif
+
 static void
 append_char (size_t *idx, char *buffer, char c)
 {
@@ -124,10 +128,10 @@ decrypt_mountables (guestfs_h *g, const char * const *mountables,
   while ((mountable = *mnt_scan++) != NULL) {
     CLEANUP_FREE char *type = NULL;
     CLEANUP_FREE char *uuid = NULL;
-    CLEANUP_FREE_STRING_LIST char **keys = NULL;
+    struct matching_key *keys;
+    size_t nr_matches;
     CLEANUP_FREE char *mapname = NULL;
-    const char * const *key_scan;
-    const char *key;
+    size_t scan;
 
     type = guestfs_vfs_type (g, mountable);
     if (type == NULL)
@@ -144,33 +148,45 @@ decrypt_mountables (guestfs_h *g, const char * const *mountables,
     /* Grab the keys that we should try with this device, based on device name,
      * or UUID (if any).
      */
-    keys = get_keys (ks, mountable, uuid);
-    assert (keys[0] != NULL);
+    keys = get_keys (ks, mountable, uuid, &nr_matches);
+    assert (nr_matches > 0);
 
     /* Generate a node name for the plaintext (decrypted) device node. */
     if (uuid == NULL || asprintf (&mapname, "luks-%s", uuid) == -1)
       mapname = make_mapname (mountable);
 
     /* Try each key in turn. */
-    key_scan = (const char * const *)keys;
-    while ((key = *key_scan++) != NULL) {
+    for (scan = 0; scan < nr_matches; ++scan) {
+      struct matching_key *key = keys + scan;
       int r;
 
       guestfs_push_error_handler (g, NULL, NULL);
-      r = guestfs_cryptsetup_open (g, mountable, key, mapname, -1);
+      assert (key->clevis == (key->passphrase == NULL));
+      if (key->clevis)
+#ifdef GUESTFS_HAVE_CLEVIS_LUKS_UNLOCK
+        r = guestfs_clevis_luks_unlock (g, mountable, mapname);
+#else
+        error (EXIT_FAILURE, 0,
+               _("'clevis_luks_unlock', needed for decrypting %s, is "
+                 "unavailable in this libguestfs version"), mountable);
+#endif
+      else
+        r = guestfs_cryptsetup_open (g, mountable, key->passphrase, mapname,
+                                     -1);
       guestfs_pop_error_handler (g);
 
       if (r == 0)
         break;
     }
 
-    if (key == NULL)
+    if (scan == nr_matches)
       error (EXIT_FAILURE, 0,
              _("could not find key to open LUKS encrypted %s.\n\n"
                "Try using --key on the command line.\n\n"
                "Original error: %s (%d)"),
              mountable, guestfs_last_error (g), guestfs_last_errno (g));
 
+    free_keys (keys, nr_matches);
     decrypted_some = true;
   }
 
@@ -184,8 +200,8 @@ decrypt_mountables (guestfs_h *g, const char * const *mountables,
 void
 inspect_do_decrypt (guestfs_h *g, struct key_store *ks)
 {
+  const char *lvm2_feature[] = { "lvm2", NULL };
   CLEANUP_FREE_STRING_LIST char **partitions = guestfs_list_partitions (g);
-  CLEANUP_FREE_STRING_LIST char **lvs = NULL;
   bool need_rescan;
 
   if (partitions == NULL)
@@ -193,13 +209,17 @@ inspect_do_decrypt (guestfs_h *g, struct key_store *ks)
 
   need_rescan = decrypt_mountables (g, (const char * const *)partitions, ks);
 
-  if (need_rescan) {
-    if (guestfs_lvm_scan (g, 1) == -1)
+  if (guestfs_feature_available (g, (char **) lvm2_feature) > 0) {
+    CLEANUP_FREE_STRING_LIST char **lvs = NULL;
+
+    if (need_rescan) {
+      if (guestfs_lvm_scan (g, 1) == -1)
+        exit (EXIT_FAILURE);
+    }
+
+    lvs = guestfs_lvs (g);
+    if (lvs == NULL)
       exit (EXIT_FAILURE);
+    decrypt_mountables (g, (const char * const *)lvs, ks);
   }
-
-  lvs = guestfs_lvs (g);
-  if (lvs == NULL)
-    exit (EXIT_FAILURE);
-  decrypt_mountables (g, (const char * const *)lvs, ks);
 }
index 90a3b15c57a2ede3698f980027f37addea1cb952..6bc04df177b1403367017ad03195f5d6528ede7f 100644 (file)
@@ -14,4 +14,13 @@ Use the specified C<KEY_STRING> as passphrase.
 
 Read the passphrase from F<FILENAME>.
 
+=item B<--key> C<ID>:clevis
+
+Attempt passphrase-less unlocking for C<ID> with Clevis, over the
+network.  Please refer to L<guestfs(3)/ENCRYPTED DISKS> for more
+information on network-bound disk encryption (NBDE).
+
+Note that if any such option is present on the command line, QEMU user
+networking will be automatically enabled for the libguestfs appliance.
+
 =back
index 798315c2e95af5014d2f7930ff8cb02aca6ab374..48f1bc7c7c471e1d49a6774f3cd48843055e3453 100644 (file)
@@ -1,5 +1,5 @@
 /* libguestfs - guestfish and guestmount shared option parsing
- * Copyright (C) 2010-2012 Red Hat Inc.
+ * Copyright (C) 2010-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -125,30 +125,35 @@ read_first_line_from_file (const char *filename)
  * keystore.  There may be multiple.  If none are read from the
  * keystore, ask the user.
  */
-char **
-get_keys (struct key_store *ks, const char *device, const char *uuid)
+struct matching_key *
+get_keys (struct key_store *ks, const char *device, const char *uuid,
+          size_t *nr_matches)
 {
-  size_t i, j, len;
-  char **r;
+  size_t i, nmemb;
+  struct matching_key *r, *match;
   char *s;
 
   /* We know the returned list must have at least one element and not
    * more than ks->nr_keys.
    */
-  len = 1;
-  if (ks)
-    len = MIN (1, ks->nr_keys);
-  r = calloc (len+1, sizeof (char *));
+  nmemb = 1;
+  if (ks && ks->nr_keys > nmemb)
+    nmemb = ks->nr_keys;
+
+  if (nmemb > (size_t)-1 / sizeof *r)
+    error (EXIT_FAILURE, 0, _("size_t overflow"));
+
+  r = malloc (nmemb * sizeof *r);
   if (r == NULL)
-    error (EXIT_FAILURE, errno, "calloc");
+    error (EXIT_FAILURE, errno, "malloc");
 
-  j = 0;
+  match = r;
 
   if (ks) {
     for (i = 0; i < ks->nr_keys; ++i) {
       struct key_store_key *key = &ks->keys[i];
 
-      if (STRNEQ (key->id, device) && (uuid && STRNEQ (key->id, uuid)))
+      if (STRNEQ (key->id, device) && (!uuid || STRNEQ (key->id, uuid)))
         continue;
 
       switch (key->type) {
@@ -156,68 +161,101 @@ get_keys (struct key_store *ks, const char *device, const char *uuid)
         s = strdup (key->string.s);
         if (!s)
           error (EXIT_FAILURE, errno, "strdup");
-        r[j++] = s;
+        match->clevis = false;
+        match->passphrase = s;
+        ++match;
         break;
       case key_file:
         s = read_first_line_from_file (key->file.name);
-        r[j++] = s;
+        match->clevis = false;
+        match->passphrase = s;
+        ++match;
+        break;
+      case key_clevis:
+        match->clevis = true;
+        match->passphrase = NULL;
+        ++match;
         break;
       }
     }
   }
 
-  if (j == 0) {
+  if (match == r) {
     /* Key not found in the key store, ask the user for it. */
     s = read_key (device);
     if (!s)
       error (EXIT_FAILURE, 0, _("could not read key from user"));
-    r[0] = s;
+    match->clevis = false;
+    match->passphrase = s;
+    ++match;
   }
 
+  *nr_matches = (size_t)(match - r);
   return r;
 }
 
+void
+free_keys (struct matching_key *keys, size_t nr_matches)
+{
+  size_t i;
+
+  for (i = 0; i < nr_matches; ++i) {
+    struct matching_key *key = keys + i;
+
+    assert (key->clevis == (key->passphrase == NULL));
+    if (!key->clevis)
+      free (key->passphrase);
+  }
+  free (keys);
+}
+
 struct key_store *
 key_store_add_from_selector (struct key_store *ks, const char *selector)
 {
-  CLEANUP_FREE_STRING_LIST char **fields =
-    guestfs_int_split_string (':', selector);
+  CLEANUP_FREE_STRING_LIST char **fields = NULL;
+  size_t field_count;
   struct key_store_key key;
 
+  fields = guestfs_int_split_string (':', selector);
   if (!fields)
     error (EXIT_FAILURE, errno, "guestfs_int_split_string");
+  field_count = guestfs_int_count_strings (fields);
 
-  if (guestfs_int_count_strings (fields) != 3) {
-   invalid_selector:
-    error (EXIT_FAILURE, 0, "invalid selector for --key: %s", selector);
-  }
-
-  /* 1: device */
+  /* field#0: ID */
+  if (field_count < 1)
+    error (EXIT_FAILURE, 0, _("selector '%s': missing ID"), selector);
   key.id = strdup (fields[0]);
   if (!key.id)
     error (EXIT_FAILURE, errno, "strdup");
 
-  /* 2: key type */
-  if (STREQ (fields[1], "key"))
-    key.type = key_string;
-  else if (STREQ (fields[1], "file"))
-    key.type = key_file;
-  else
-    goto invalid_selector;
+  /* field#1...: TYPE, and TYPE-specific properties */
+  if (field_count < 2)
+    error (EXIT_FAILURE, 0, _("selector '%s': missing TYPE"), selector);
 
-  /* 3: actual key */
-  switch (key.type) {
-  case key_string:
+  if (STREQ (fields[1], "key")) {
+    key.type = key_string;
+    if (field_count != 3)
+      error (EXIT_FAILURE, 0,
+             _("selector '%s': missing KEY_STRING, or too many fields"),
+             selector);
     key.string.s = strdup (fields[2]);
     if (!key.string.s)
       error (EXIT_FAILURE, errno, "strdup");
-    break;
-  case key_file:
+  } else if (STREQ (fields[1], "file")) {
+    key.type = key_file;
+    if (field_count != 3)
+      error (EXIT_FAILURE, 0,
+             _("selector '%s': missing FILENAME, or too many fields"),
+             selector);
     key.file.name = strdup (fields[2]);
     if (!key.file.name)
       error (EXIT_FAILURE, errno, "strdup");
-    break;
-  }
+  } else if (STREQ (fields[1], "clevis")) {
+    key.type = key_clevis;
+    if (field_count != 2)
+      error (EXIT_FAILURE, 0, _("selector '%s': too many fields"), selector);
+  } else
+    error (EXIT_FAILURE, 0, _("selector '%s': invalid TYPE"), selector);
 
   return key_store_import_key (ks, &key);
 }
@@ -246,6 +284,21 @@ key_store_import_key (struct key_store *ks, const struct key_store_key *key)
   return ks;
 }
 
+bool
+key_store_requires_network (const struct key_store *ks)
+{
+  size_t i;
+
+  if (ks == NULL)
+    return false;
+
+  for (i = 0; i < ks->nr_keys; ++i)
+    if (ks->keys[i].type == key_clevis)
+      return true;
+
+  return false;
+}
+
 void
 free_key_store (struct key_store *ks)
 {
@@ -264,7 +317,13 @@ free_key_store (struct key_store *ks)
     case key_file:
       free (key->file.name);
       break;
+    case key_clevis:
+      /* nothing */
+      break;
     }
     free (key->id);
   }
+
+  free (ks->keys);
+  free (ks);
 }
index abdcbae5be3c8a7c4b2d0bdefe286077badb5640..4e1081c986eb13a4089cc0632a8031f83e375688 100644 (file)
@@ -1,5 +1,5 @@
 /* libguestfs - guestfish and guestmount shared option parsing
- * Copyright (C) 2010-2012 Red Hat Inc.
+ * Copyright (C) 2010-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index 80df91a85f9827b8b2bff9aae68f5f33ec4c8a1c..94573ee063bbdcf1b2c811116354eb6a83c4e468 100644 (file)
@@ -1,5 +1,5 @@
 /* libguestfs - guestfish and guestmount shared option parsing
- * Copyright (C) 2010-2012 Red Hat Inc.
+ * Copyright (C) 2010-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -115,6 +115,7 @@ struct key_store_key {
   enum {
     key_string,             /* key specified as string */
     key_file,               /* key stored in a file */
+    key_clevis,             /* key reconstructed with Clevis+Tang */
   } type;
   union {
     struct {
@@ -134,6 +135,19 @@ struct key_store {
   size_t nr_keys;
 };
 
+/* A key matching a particular ID (pathname of the libguestfs device node that
+ * stands for the encrypted block device, or LUKS UUID).
+ */
+struct matching_key {
+  /* True iff the passphrase should be reconstructed using Clevis, talking to
+   * Tang servers over the network.
+   */
+  bool clevis;
+
+  /* Explicit passphrase, otherwise. */
+  char *passphrase;
+};
+
 /* in config.c */
 extern void parse_config (void);
 
@@ -151,9 +165,12 @@ extern void print_inspect_prompt (void);
 
 /* in key.c */
 extern char *read_key (const char *param);
-extern char **get_keys (struct key_store *ks, const char *device, const char *uuid);
+extern struct matching_key *get_keys (struct key_store *ks, const char *device,
+                                      const char *uuid, size_t *nr_matches);
+extern void free_keys (struct matching_key *keys, size_t nr_matches);
 extern struct key_store *key_store_add_from_selector (struct key_store *ks, const char *selector);
 extern struct key_store *key_store_import_key (struct key_store *ks, const struct key_store_key *key);
+extern bool key_store_requires_network (const struct key_store *ks);
 extern void free_key_store (struct key_store *ks);
 
 /* in options.c */
index 6b696fc2d1084600b0dc4698fd32531258886195..84d393c1e996c756257461536164d7867f9253df 100644 (file)
@@ -135,7 +135,7 @@ parse (const char *arg, char **path_ret, char **protocol_ret,
   socket = query_get (uri, "socket");
 
   if (uri->server && STRNEQ (uri->server, "") && socket) {
-    fprintf (stderr, _("%s: %s: cannot both a server name and a socket query parameter\n"),
+    fprintf (stderr, _("%s: %s: cannot have both a server name and a socket query parameter\n"),
              getprogname (), arg);
     return -1;
   }
@@ -347,6 +347,7 @@ make_server (xmlURIPtr uri, const char *socket, char ***ret)
   *ret = malloc (sizeof (char *) * 2);
   if (*ret == NULL) {
     perror ("malloc");
+    free (server);
     return -1;
   }
   (*ret)[0] = server;
index 045cc2590824b2a6722da9b5518b2867ec3ea67c..f1f5ce4052aad5ea35c07bd41c4d42b00be3197a 100644 (file)
@@ -32,7 +32,7 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -280,7 +280,6 @@ EGREP = @EGREP@
 ETAGS = @ETAGS@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FILECMD = @FILECMD@
 GCC_VISIBILITY_HIDDEN = @GCC_VISIBILITY_HIDDEN@
 GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
 GMSGFMT = @GMSGFMT@
@@ -309,6 +308,8 @@ LIBINTL = @LIBINTL@
 LIBLZMA_CFLAGS = @LIBLZMA_CFLAGS@
 LIBLZMA_LIBS = @LIBLZMA_LIBS@
 LIBOBJS = @LIBOBJS@
+LIBOSINFO_CFLAGS = @LIBOSINFO_CFLAGS@
+LIBOSINFO_LIBS = @LIBOSINFO_LIBS@
 LIBS = @LIBS@
 LIBTINFO_CFLAGS = @LIBTINFO_CFLAGS@
 LIBTINFO_LIBS = @LIBTINFO_LIBS@
@@ -379,6 +380,7 @@ PO4A_TRANSLATE = @PO4A_TRANSLATE@
 PODWRAPPER = @PODWRAPPER@
 POSUB = @POSUB@
 RANLIB = @RANLIB@
+REALPATH = @REALPATH@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
index c89bea8b3f0ca663d6f6ec26c98b914d8abb557a..18b06074025e5ccee133f1b4e855020cbd634308 100644 (file)
@@ -172,7 +172,7 @@ worker_thread (void *thread_data_vp)
   thread_data->r = 0;
 
   if (thread_data->verbose)
-    fprintf (stderr, "parallel: thread %zu starting\n",
+    fprintf (stderr, "parallel: thread %zu: starting\n",
              thread_data->thread_num);
 
   while (1) {
@@ -186,7 +186,7 @@ worker_thread (void *thread_data_vp)
 
     /* Take the next domain from the list. */
     if (thread_data->verbose)
-      fprintf (stderr, "parallel: thread %zu waiting to get work\n",
+      fprintf (stderr, "parallel: thread %zu: waiting to get work\n",
                thread_data->thread_num);
 
     err = pthread_mutex_lock (&take_mutex);
@@ -207,7 +207,7 @@ worker_thread (void *thread_data_vp)
       break;
 
     if (thread_data->verbose)
-      fprintf (stderr, "parallel: thread %zu taking domain %zu\n",
+      fprintf (stderr, "parallel: thread %zu: taking domain %zu\n",
                thread_data->thread_num, i);
 
     fp = open_memstream (&output, &output_len);
@@ -240,7 +240,7 @@ worker_thread (void *thread_data_vp)
 
       if (thread_data->verbose)
         fprintf (stderr,
-                 "parallel: thread %zu work function returned an error\n",
+                 "parallel: thread %zu: work function returned an error\n",
                  thread_data->thread_num);
     }
 
@@ -250,16 +250,20 @@ worker_thread (void *thread_data_vp)
     /* Retire this domain.  We have to retire domains in order, which
      * may mean waiting for another thread to finish here.
      */
-    if (thread_data->verbose)
-      fprintf (stderr, "parallel: thread %zu waiting to retire domain %zu\n",
-               thread_data->thread_num, i);
-
     err = pthread_mutex_lock (&retire_mutex);
     if (err != 0) {
       thread_failure ("pthread_mutex_lock", err);
       thread_data->r = -1;
       return &thread_data->r;
     }
+
+    if (thread_data->verbose)
+      fprintf (stderr, "parallel: thread %zu: "
+               "waiting to retire domain %zu "
+               "(next domain to retire %zu)"
+               "\n",
+               thread_data->thread_num, i, next_domain_to_retire);
+
     while (next_domain_to_retire != i) {
       err = pthread_cond_wait (&retire_cond, &retire_mutex);
       if (err != 0) {
@@ -271,13 +275,18 @@ worker_thread (void *thread_data_vp)
     }
 
     if (thread_data->verbose)
-      fprintf (stderr, "parallel: thread %zu retiring domain %zu\n",
+      fprintf (stderr, "parallel: thread %zu: retiring domain %zu\n",
                thread_data->thread_num, i);
 
     /* Retire domain. */
     printf ("%s", output);
 
     /* Update next_domain_to_retire and tell other threads. */
+    if (thread_data->verbose)
+      fprintf (stderr, "parallel: thread %zu: "
+               "next domain to retire %zu -> %zu\n",
+               thread_data->thread_num, next_domain_to_retire, i+1);
+
     next_domain_to_retire = i+1;
     pthread_cond_broadcast (&retire_cond);
     err = pthread_mutex_unlock (&retire_mutex);
@@ -289,7 +298,7 @@ worker_thread (void *thread_data_vp)
   }
 
   if (thread_data->verbose)
-    fprintf (stderr, "parallel: thread %zu exiting (r = %d)\n",
+    fprintf (stderr, "parallel: thread %zu: exiting (r = %d)\n",
              thread_data->thread_num, thread_data->r);
 
   return &thread_data->r;
index eccae568f5c4c3a358d2653f3c26a45b256fa894..2324f15e2766dd0f9262b021f045333c7a5af0f5 100644 (file)
@@ -32,7 +32,7 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -273,7 +273,6 @@ EGREP = @EGREP@
 ETAGS = @ETAGS@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FILECMD = @FILECMD@
 GCC_VISIBILITY_HIDDEN = @GCC_VISIBILITY_HIDDEN@
 GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
 GMSGFMT = @GMSGFMT@
@@ -302,6 +301,8 @@ LIBINTL = @LIBINTL@
 LIBLZMA_CFLAGS = @LIBLZMA_CFLAGS@
 LIBLZMA_LIBS = @LIBLZMA_LIBS@
 LIBOBJS = @LIBOBJS@
+LIBOSINFO_CFLAGS = @LIBOSINFO_CFLAGS@
+LIBOSINFO_LIBS = @LIBOSINFO_LIBS@
 LIBS = @LIBS@
 LIBTINFO_CFLAGS = @LIBTINFO_CFLAGS@
 LIBTINFO_LIBS = @LIBTINFO_LIBS@
@@ -372,6 +373,7 @@ PO4A_TRANSLATE = @PO4A_TRANSLATE@
 PODWRAPPER = @PODWRAPPER@
 POSUB = @POSUB@
 RANLIB = @RANLIB@
+REALPATH = @REALPATH@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
index 29e900d12fe3b587b73bc425077e96469e3fbfd9..4d52b97ea127a241104f1188b2078cfef93a7d36 100644 (file)
@@ -1,5 +1,5 @@
 /* libguestfs - mini library for progress bars.
- * Copyright (C) 2010-2012 Red Hat Inc.
+ * Copyright (C) 2010-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index 4fc0eaf0820345269141c611195b9df9b82edc2d..21425c08f0ea20e93f11748fb9281fb21003e794 100644 (file)
@@ -1,5 +1,5 @@
 /* libguestfs - mini library for progress bars.
- * Copyright (C) 2010-2012 Red Hat Inc.
+ * Copyright (C) 2010-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index dda0f40dcecb5c3a0e5bd4f12214a8e5360ef4f9..a76156201d38ee618839aa46f8b38b1ea5339156 100644 (file)
@@ -32,7 +32,7 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -274,7 +274,6 @@ EGREP = @EGREP@
 ETAGS = @ETAGS@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FILECMD = @FILECMD@
 GCC_VISIBILITY_HIDDEN = @GCC_VISIBILITY_HIDDEN@
 GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
 GMSGFMT = @GMSGFMT@
@@ -303,6 +302,8 @@ LIBINTL = @LIBINTL@
 LIBLZMA_CFLAGS = @LIBLZMA_CFLAGS@
 LIBLZMA_LIBS = @LIBLZMA_LIBS@
 LIBOBJS = @LIBOBJS@
+LIBOSINFO_CFLAGS = @LIBOSINFO_CFLAGS@
+LIBOSINFO_LIBS = @LIBOSINFO_LIBS@
 LIBS = @LIBS@
 LIBTINFO_CFLAGS = @LIBTINFO_CFLAGS@
 LIBTINFO_LIBS = @LIBTINFO_LIBS@
@@ -373,6 +374,7 @@ PO4A_TRANSLATE = @PO4A_TRANSLATE@
 PODWRAPPER = @PODWRAPPER@
 POSUB = @POSUB@
 RANLIB = @RANLIB@
+REALPATH = @REALPATH@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
index 52f4927e9057509391d47170929ba8a482a98a2f..3ff59cc923d65894a91ae4cc84ef6488e5a9d72a 100644 (file)
@@ -4,7 +4,7 @@
  *          and from the code in the generator/ subdirectory.
  * ANY CHANGES YOU MAKE TO THIS FILE WILL BE LOST.
  *
- * Copyright (C) 2009-2020 Red Hat Inc.
+ * Copyright (C) 2009-2023 Red Hat Inc.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
index 727c30182ee25e101bd6d40cb537aa875b93e078..b43dbd75041c369e53c566408e8b3a3a88a9e6ef 100644 (file)
@@ -4,7 +4,7 @@
  *          and from the code in the generator/ subdirectory.
  * ANY CHANGES YOU MAKE TO THIS FILE WILL BE LOST.
  *
- * Copyright (C) 2009-2020 Red Hat Inc.
+ * Copyright (C) 2009-2023 Red Hat Inc.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
index ea6ea56576f5b6c501391fca947945a8e5fb8c91..6d825e1bfae5715794f0aea758904a2c50cb3fa7 100644 (file)
@@ -4,7 +4,7 @@
  *          and from the code in the generator/ subdirectory.
  * ANY CHANGES YOU MAKE TO THIS FILE WILL BE LOST.
  *
- * Copyright (C) 2009-2020 Red Hat Inc.
+ * Copyright (C) 2009-2023 Red Hat Inc.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
index 6bcd8bb248c7e658c6e4bc02ff3dcb21eb616934..c2d5cfba93e01ed4cff5480bfa583ed084d50551 100644 (file)
@@ -4,7 +4,7 @@
  *          and from the code in the generator/ subdirectory.
  * ANY CHANGES YOU MAKE TO THIS FILE WILL BE LOST.
  *
- * Copyright (C) 2009-2020 Red Hat Inc.
+ * Copyright (C) 2009-2023 Red Hat Inc.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
index 665fc43258d557cac24d9a3ea15a1da89f03d172..25c6100b2a7e7e7993b10ca4502bfe62fdb70441 100644 (file)
@@ -22,6 +22,7 @@ noinst_LTLIBRARIES = libutils.la
 libutils_la_SOURCES = \
        cleanups.c \
        cleanups.h \
+       environ.c \
        gnulib-cleanups.c \
        guestfs-stringlists-utils.h \
        guestfs-utils.h \
index ff5df3db4de949c89605dde4b876257f63b47c3c..24a596574821e7ca2298193813cc55b51ad9403b 100644 (file)
@@ -32,7 +32,7 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -168,9 +168,9 @@ CONFIG_CLEAN_VPATH_FILES =
 LTLIBRARIES = $(noinst_LTLIBRARIES)
 libutils_la_LIBADD =
 am_libutils_la_OBJECTS = libutils_la-cleanups.lo \
-       libutils_la-gnulib-cleanups.lo libutils_la-libxml2-cleanups.lo \
-       libutils_la-pcre2-cleanups.lo libutils_la-stringlists-utils.lo \
-       libutils_la-utils.lo
+       libutils_la-environ.lo libutils_la-gnulib-cleanups.lo \
+       libutils_la-libxml2-cleanups.lo libutils_la-pcre2-cleanups.lo \
+       libutils_la-stringlists-utils.lo libutils_la-utils.lo
 libutils_la_OBJECTS = $(am_libutils_la_OBJECTS)
 AM_V_lt = $(am__v_lt_@AM_V@)
 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
@@ -195,6 +195,7 @@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
 depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
 am__maybe_remake_depfiles = depfiles
 am__depfiles_remade = ./$(DEPDIR)/libutils_la-cleanups.Plo \
+       ./$(DEPDIR)/libutils_la-environ.Plo \
        ./$(DEPDIR)/libutils_la-gnulib-cleanups.Plo \
        ./$(DEPDIR)/libutils_la-libxml2-cleanups.Plo \
        ./$(DEPDIR)/libutils_la-pcre2-cleanups.Plo \
@@ -278,7 +279,6 @@ EGREP = @EGREP@
 ETAGS = @ETAGS@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FILECMD = @FILECMD@
 GCC_VISIBILITY_HIDDEN = @GCC_VISIBILITY_HIDDEN@
 GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
 GMSGFMT = @GMSGFMT@
@@ -307,6 +307,8 @@ LIBINTL = @LIBINTL@
 LIBLZMA_CFLAGS = @LIBLZMA_CFLAGS@
 LIBLZMA_LIBS = @LIBLZMA_LIBS@
 LIBOBJS = @LIBOBJS@
+LIBOSINFO_CFLAGS = @LIBOSINFO_CFLAGS@
+LIBOSINFO_LIBS = @LIBOSINFO_LIBS@
 LIBS = @LIBS@
 LIBTINFO_CFLAGS = @LIBTINFO_CFLAGS@
 LIBTINFO_LIBS = @LIBTINFO_LIBS@
@@ -377,6 +379,7 @@ PO4A_TRANSLATE = @PO4A_TRANSLATE@
 PODWRAPPER = @PODWRAPPER@
 POSUB = @POSUB@
 RANLIB = @RANLIB@
+REALPATH = @REALPATH@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
@@ -521,6 +524,7 @@ noinst_LTLIBRARIES = libutils.la
 libutils_la_SOURCES = \
        cleanups.c \
        cleanups.h \
+       environ.c \
        gnulib-cleanups.c \
        guestfs-stringlists-utils.h \
        guestfs-utils.h \
@@ -598,6 +602,7 @@ distclean-compile:
        -rm -f *.tab.c
 
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libutils_la-cleanups.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libutils_la-environ.Plo@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libutils_la-gnulib-cleanups.Plo@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libutils_la-libxml2-cleanups.Plo@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libutils_la-pcre2-cleanups.Plo@am__quote@ # am--include-marker
@@ -641,6 +646,13 @@ libutils_la-cleanups.lo: cleanups.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutils_la_CPPFLAGS) $(CPPFLAGS) $(libutils_la_CFLAGS) $(CFLAGS) -c -o libutils_la-cleanups.lo `test -f 'cleanups.c' || echo '$(srcdir)/'`cleanups.c
 
+libutils_la-environ.lo: environ.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutils_la_CPPFLAGS) $(CPPFLAGS) $(libutils_la_CFLAGS) $(CFLAGS) -MT libutils_la-environ.lo -MD -MP -MF $(DEPDIR)/libutils_la-environ.Tpo -c -o libutils_la-environ.lo `test -f 'environ.c' || echo '$(srcdir)/'`environ.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libutils_la-environ.Tpo $(DEPDIR)/libutils_la-environ.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='environ.c' object='libutils_la-environ.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutils_la_CPPFLAGS) $(CPPFLAGS) $(libutils_la_CFLAGS) $(CFLAGS) -c -o libutils_la-environ.lo `test -f 'environ.c' || echo '$(srcdir)/'`environ.c
+
 libutils_la-gnulib-cleanups.lo: gnulib-cleanups.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libutils_la_CPPFLAGS) $(CPPFLAGS) $(libutils_la_CFLAGS) $(CFLAGS) -MT libutils_la-gnulib-cleanups.lo -MD -MP -MF $(DEPDIR)/libutils_la-gnulib-cleanups.Tpo -c -o libutils_la-gnulib-cleanups.lo `test -f 'gnulib-cleanups.c' || echo '$(srcdir)/'`gnulib-cleanups.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libutils_la-gnulib-cleanups.Tpo $(DEPDIR)/libutils_la-gnulib-cleanups.Plo
@@ -809,6 +821,7 @@ clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
 
 distclean: distclean-am
                -rm -f ./$(DEPDIR)/libutils_la-cleanups.Plo
+       -rm -f ./$(DEPDIR)/libutils_la-environ.Plo
        -rm -f ./$(DEPDIR)/libutils_la-gnulib-cleanups.Plo
        -rm -f ./$(DEPDIR)/libutils_la-libxml2-cleanups.Plo
        -rm -f ./$(DEPDIR)/libutils_la-pcre2-cleanups.Plo
@@ -860,6 +873,7 @@ installcheck-am:
 
 maintainer-clean: maintainer-clean-am
                -rm -f ./$(DEPDIR)/libutils_la-cleanups.Plo
+       -rm -f ./$(DEPDIR)/libutils_la-environ.Plo
        -rm -f ./$(DEPDIR)/libutils_la-gnulib-cleanups.Plo
        -rm -f ./$(DEPDIR)/libutils_la-libxml2-cleanups.Plo
        -rm -f ./$(DEPDIR)/libutils_la-pcre2-cleanups.Plo
diff --git a/common/utils/environ.c b/common/utils/environ.c
new file mode 100644 (file)
index 0000000..c3f82b5
--- /dev/null
@@ -0,0 +1,105 @@
+/* nbdkit
+ * Copyright (C) 2018-2023 Red Hat Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * * Neither the name of Red Hat nor the names of its contributors may be
+ * used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY RED HAT AND CONTRIBUTORS ''AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL RED HAT OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <config.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+
+#include "guestfs-stringlists-utils.h"
+#include "guestfs-utils.h"
+
+/* Copy an environ.  Also this allows you to add (key, value) pairs to
+ * the environ through the varargs NULL-terminated list.  Returns NULL
+ * if the copy or allocation failed.
+ */
+char **
+guestfs_int_copy_environ (char **env, ...)
+{
+  char **ret = NULL, **new_ret;
+  size_t i, len, nr_strings;
+  char *s;
+  va_list argp;
+  const char *key, *value;
+
+  /* Copy the existing keys into the new vector. */
+  ret = guestfs_int_copy_string_list (env);
+  if (ret == NULL)
+    return NULL;
+  nr_strings = guestfs_int_count_strings (ret);
+
+  /* Add the new keys. */
+  va_start (argp, env);
+  while ((key = va_arg (argp, const char *)) != NULL) {
+    value = va_arg (argp, const char *);
+    if (asprintf (&s, "%s=%s", key, value) == -1) {
+      va_end (argp);
+      goto error;
+    }
+
+    /* Search for key in the existing environment.  It's O(n^2) ... */
+    len = strlen (key);
+    for (i = 0; ret[i] != NULL; ++i) {
+      if (strncmp (key, ret[i], len) == 0 && ret[i][len] == '=') {
+        /* Replace the existing key. */
+        free (ret[i]);
+        ret[i] = s;
+        goto found;
+      }
+    }
+
+    /* Else, append a new key to the list. */
+    new_ret = realloc (ret, (nr_strings+2) * sizeof (char *));
+    if (new_ret == NULL) {
+      free (s);
+      goto error;
+    }
+    ret = new_ret;
+    ret[nr_strings+1] = NULL;
+    ret[nr_strings] = s;
+    nr_strings++;
+
+  found: ;
+  }
+  va_end (argp);
+
+  /* Return the list of strings. */
+  return ret;
+
+ error:
+  for (i = 0; ret[i] != NULL; ++i)
+    free (ret[i]);
+  free (ret);
+  return NULL;
+}
index d568ed3b5368235f7b01e15a0145ec3532552ddf..e861e7db57a4f0844c0166329c03fb596b2d3160 100644 (file)
@@ -32,6 +32,7 @@
 #ifndef GUESTFS_UTILS_H_
 #define GUESTFS_UTILS_H_
 
+#include <stdio.h>
 #include <stdbool.h>
 
 #include "guestfs-internal-all.h"
@@ -109,4 +110,7 @@ extern const char *guestfs_int_strerror (int errnum, char *buf, size_t buflen);
       fputs ("\033[0m", (fp));                   \
   } while (0)
 
+/* environ.c */
+extern char **guestfs_int_copy_environ (char **env, ...);
+
 #endif /* GUESTFS_UTILS_H_ */
index 70e55cb2e01f16bf6e7d91ba93b6bc1251c47ce6..0144dc4bdc86a057d2e856435f56d63115152f6e 100644 (file)
@@ -654,7 +654,8 @@ guestfs_int_hexdump (const void *data, size_t len, FILE *fp)
 const char *
 guestfs_int_strerror (int errnum, char *buf, size_t buflen)
 {
-#ifdef _GNU_SOURCE
+#ifdef HAVE_DECL_STRERROR_R
+#ifdef STRERROR_R_CHAR_P
   /* GNU strerror_r */
   return strerror_r (errnum, buf, buflen);
 #else
@@ -664,4 +665,7 @@ guestfs_int_strerror (int errnum, char *buf, size_t buflen)
     snprintf (buf, buflen, "error number %d", errnum);
   return buf;
 #endif
+#else /* !HAVE_DECL_STRERROR_R */
+  return strerror (errnum);    /* YOLO it. */
+#endif
 }
index b7f0197ed4aed7507cb871295b8a74ce368e63a4..54476393595f42d32a97648446deae54918b38dc 100644 (file)
@@ -32,7 +32,7 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -270,7 +270,6 @@ EGREP = @EGREP@
 ETAGS = @ETAGS@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FILECMD = @FILECMD@
 GCC_VISIBILITY_HIDDEN = @GCC_VISIBILITY_HIDDEN@
 GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
 GMSGFMT = @GMSGFMT@
@@ -299,6 +298,8 @@ LIBINTL = @LIBINTL@
 LIBLZMA_CFLAGS = @LIBLZMA_CFLAGS@
 LIBLZMA_LIBS = @LIBLZMA_LIBS@
 LIBOBJS = @LIBOBJS@
+LIBOSINFO_CFLAGS = @LIBOSINFO_CFLAGS@
+LIBOSINFO_LIBS = @LIBOSINFO_LIBS@
 LIBS = @LIBS@
 LIBTINFO_CFLAGS = @LIBTINFO_CFLAGS@
 LIBTINFO_LIBS = @LIBTINFO_LIBS@
@@ -369,6 +370,7 @@ PO4A_TRANSLATE = @PO4A_TRANSLATE@
 PODWRAPPER = @PODWRAPPER@
 POSUB = @POSUB@
 RANLIB = @RANLIB@
+REALPATH = @REALPATH@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
index 3487545a529704a194a91ce08223f0680077590a..a7339bf983d6ed27f8551f8158ef48a32e64b6e6 100644 (file)
@@ -32,7 +32,7 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -272,7 +272,6 @@ EGREP = @EGREP@
 ETAGS = @ETAGS@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FILECMD = @FILECMD@
 GCC_VISIBILITY_HIDDEN = @GCC_VISIBILITY_HIDDEN@
 GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
 GMSGFMT = @GMSGFMT@
@@ -301,6 +300,8 @@ LIBINTL = @LIBINTL@
 LIBLZMA_CFLAGS = @LIBLZMA_CFLAGS@
 LIBLZMA_LIBS = @LIBLZMA_LIBS@
 LIBOBJS = @LIBOBJS@
+LIBOSINFO_CFLAGS = @LIBOSINFO_CFLAGS@
+LIBOSINFO_LIBS = @LIBOSINFO_LIBS@
 LIBS = @LIBS@
 LIBTINFO_CFLAGS = @LIBTINFO_CFLAGS@
 LIBTINFO_LIBS = @LIBTINFO_LIBS@
@@ -371,6 +372,7 @@ PO4A_TRANSLATE = @PO4A_TRANSLATE@
 PODWRAPPER = @PODWRAPPER@
 POSUB = @POSUB@
 RANLIB = @RANLIB@
+REALPATH = @REALPATH@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
index b441097ae14642fce2ee7fb763c99b89110c847d..355d79a7c66977226b80f1ff86ca0773d84ae1d2 100644 (file)
@@ -58,8 +58,6 @@ is_windows (guestfs_h *g, const char *root)
   return w;
 }
 
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wanalyzer-null-argument"
 /**
  * Resolves C<path> as possible Windows path according to C<root>,
  * giving a new path that can be used in libguestfs API calls.
@@ -125,7 +123,6 @@ windows_path (guestfs_h *g, const char *root, const char *path, int readonly)
 
   return ret;
 }
-#pragma GCC diagnostic pop
 
 static void
 mount_drive_letter (guestfs_h *g, char drive_letter, const char *root,
index ede6413e98e9b3e8b49a246afee7cf71bf184e1b..40cf39435f6ec745da7a5848d32ae01a5dd81cf9 100644 (file)
    */
 #undef HAVE_DCGETTEXT
 
+/* Define to 1 if you have the declaration of `strerror_r', and to 0 if you
+   don't. */
+#undef HAVE_DECL_STRERROR_R
+
 /* Define to 1 if you have the <dlfcn.h> header file. */
 #undef HAVE_DLFCN_H
 
 /* Define to 1 if you have the <errno.h> header file. */
 #undef HAVE_ERRNO_H
 
+/* Define to 1 if you have the `error' function. */
+#undef HAVE_ERROR
+
+/* Define to 1 if you have the <error.h> header file. */
+#undef HAVE_ERROR_H
+
 /* Define to 1 if you have the `fsync' function. */
 #undef HAVE_FSYNC
 
 /* Define to 1 if you have the `futimens' function. */
 #undef HAVE_FUTIMENS
 
+/* Define to 1 if you have the `getprogname' function. */
+#undef HAVE_GETPROGNAME
+
 /* Define if the GNU gettext() function is already present or preinstalled. */
 #undef HAVE_GETTEXT
 
 /* Define to 1 if you have the <stdlib.h> header file. */
 #undef HAVE_STDLIB_H
 
+/* Define if you have `strerror_r'. */
+#undef HAVE_STRERROR_R
+
 /* Define to 1 if you have the <strings.h> header file. */
 #undef HAVE_STRINGS_H
 
    backward compatibility; new code need not use it. */
 #undef STDC_HEADERS
 
+/* Define to 1 if strerror_r returns char *. */
+#undef STRERROR_R_CHAR_P
+
 /* Enable extensions on AIX 3, Interix.  */
 #ifndef _ALL_SOURCE
 # undef _ALL_SOURCE
index e7a4e83f3e95b48921b5e223b0c3bf36812491bd..10c114c782f0ae002a98bfbf4abaa54b3777b9e1 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.71 for guestfs-tools 1.48.3.
+# Generated by GNU Autoconf 2.71 for guestfs-tools 1.50.0.
 #
 #
 # Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation,
@@ -618,8 +618,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='guestfs-tools'
 PACKAGE_TARNAME='guestfs-tools'
-PACKAGE_VERSION='1.48.3'
-PACKAGE_STRING='guestfs-tools 1.48.3'
+PACKAGE_VERSION='1.50.0'
+PACKAGE_STRING='guestfs-tools 1.50.0'
 PACKAGE_BUGREPORT=''
 PACKAGE_URL=''
 
@@ -713,6 +713,8 @@ OCAMLOPT
 OCAMLLIB
 OCAMLVERSION
 OCAMLC
+LIBOSINFO_LIBS
+LIBOSINFO_CFLAGS
 JANSSON_LIBS
 JANSSON_CFLAGS
 LIBXML2_LIBS
@@ -773,6 +775,7 @@ HAVE_XMLLINT_FALSE
 HAVE_XMLLINT_TRUE
 XMLLINT
 MKISOFS
+REALPATH
 LT_SYS_LIBRARY_PATH
 OTOOL64
 OTOOL
@@ -785,7 +788,6 @@ ac_ct_AR
 AR
 DLLTOOL
 OBJDUMP
-FILECMD
 LN_S
 NM
 ac_ct_DUMPBIN
@@ -940,6 +942,8 @@ LIBXML2_CFLAGS
 LIBXML2_LIBS
 JANSSON_CFLAGS
 JANSSON_LIBS
+LIBOSINFO_CFLAGS
+LIBOSINFO_LIBS
 LIBCRYPT_CFLAGS
 LIBCRYPT_LIBS
 LIBLZMA_CFLAGS
@@ -1494,7 +1498,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures guestfs-tools 1.48.3 to adapt to many kinds of systems.
+\`configure' configures guestfs-tools 1.50.0 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1565,7 +1569,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of guestfs-tools 1.48.3:";;
+     short | recursive ) echo "Configuration of guestfs-tools 1.50.0:";;
    esac
   cat <<\_ACEOF
 
@@ -1654,6 +1658,10 @@ Some influential environment variables:
               C compiler flags for JANSSON, overriding pkg-config
   JANSSON_LIBS
               linker flags for JANSSON, overriding pkg-config
+  LIBOSINFO_CFLAGS
+              C compiler flags for LIBOSINFO, overriding pkg-config
+  LIBOSINFO_LIBS
+              linker flags for LIBOSINFO, overriding pkg-config
   LIBCRYPT_CFLAGS
               C compiler flags for LIBCRYPT, overriding pkg-config
   LIBCRYPT_LIBS
@@ -1734,7 +1742,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-guestfs-tools configure 1.48.3
+guestfs-tools configure 1.50.0
 generated by GNU Autoconf 2.71
 
 Copyright (C) 2021 Free Software Foundation, Inc.
@@ -2198,6 +2206,58 @@ rm -f conftest.val
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_compute_int
+
+# ac_fn_check_decl LINENO SYMBOL VAR INCLUDES EXTRA-OPTIONS FLAG-VAR
+# ------------------------------------------------------------------
+# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR
+# accordingly. Pass EXTRA-OPTIONS to the compiler, using FLAG-VAR.
+ac_fn_check_decl ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  as_decl_name=`echo $2|sed 's/ *(.*//'`
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
+printf %s "checking whether $as_decl_name is declared... " >&6; }
+if eval test \${$3+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
+  eval ac_save_FLAGS=\$$6
+  as_fn_append $6 " $5"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main (void)
+{
+#ifndef $as_decl_name
+#ifdef __cplusplus
+  (void) $as_decl_use;
+#else
+  (void) $as_decl_name;
+#endif
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+  eval "$3=yes"
+else $as_nop
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+  eval $6=\$ac_save_FLAGS
+
+fi
+eval ac_res=\$$3
+              { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_check_decl
 ac_configure_args_raw=
 for ac_arg
 do
@@ -2222,7 +2282,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by guestfs-tools $as_me 1.48.3, which was
+It was created by guestfs-tools $as_me 1.50.0, which was
 generated by GNU Autoconf 2.71.  Invocation command line was
 
   $ $0$ac_configure_args_raw
@@ -4800,7 +4860,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='guestfs-tools'
- VERSION='1.48.3'
+ VERSION='1.50.0'
 
 
 printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
@@ -5171,8 +5231,8 @@ esac
 
 
 
-macro_version='2.4.7'
-macro_revision='2.4.7'
+macro_version='2.4.6'
+macro_revision='2.4.6'
 
 
 
@@ -5800,13 +5860,13 @@ else
        mingw*) lt_bad_file=conftest.nm/nofile ;;
        *) lt_bad_file=/dev/null ;;
        esac
-       case `"$tmp_nm" -B $lt_bad_file 2>&1 | $SED '1q'` in
+       case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in
        *$lt_bad_file* | *'Invalid file or object type'*)
          lt_cv_path_NM="$tmp_nm -B"
          break 2
          ;;
        *)
-         case `"$tmp_nm" -p /dev/null 2>&1 | $SED '1q'` in
+         case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
          */dev/null*)
            lt_cv_path_NM="$tmp_nm -p"
            break 2
@@ -5944,7 +6004,7 @@ esac
   fi
 fi
 
-    case `$DUMPBIN -symbols -headers /dev/null 2>&1 | $SED '1q'` in
+    case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in
     *COFF*)
       DUMPBIN="$DUMPBIN -symbols -headers"
       ;;
@@ -6048,7 +6108,7 @@ else $as_nop
     lt_cv_sys_max_cmd_len=8192;
     ;;
 
-  bitrig* | darwin* | dragonfly* | freebsd* | midnightbsd* | netbsd* | openbsd*)
+  bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*)
     # This has been around since 386BSD, at least.  Likely further.
     if test -x /sbin/sysctl; then
       lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
@@ -6091,7 +6151,7 @@ else $as_nop
   sysv5* | sco5v6* | sysv4.2uw2*)
     kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
     if test -n "$kargmax"; then
-      lt_cv_sys_max_cmd_len=`echo $kargmax | $SED 's/.*[        ]//'`
+      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[         ]//'`
     else
       lt_cv_sys_max_cmd_len=32768
     fi
@@ -6296,114 +6356,6 @@ esac
 
 
 
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}file", so it can be a program name with args.
-set dummy ${ac_tool_prefix}file; ac_word=$2
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-printf %s "checking for $ac_word... " >&6; }
-if test ${ac_cv_prog_FILECMD+y}
-then :
-  printf %s "(cached) " >&6
-else $as_nop
-  if test -n "$FILECMD"; then
-  ac_cv_prog_FILECMD="$FILECMD" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  case $as_dir in #(((
-    '') as_dir=./ ;;
-    */) ;;
-    *) as_dir=$as_dir/ ;;
-  esac
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
-    ac_cv_prog_FILECMD="${ac_tool_prefix}file"
-    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-FILECMD=$ac_cv_prog_FILECMD
-if test -n "$FILECMD"; then
-  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $FILECMD" >&5
-printf "%s\n" "$FILECMD" >&6; }
-else
-  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_FILECMD"; then
-  ac_ct_FILECMD=$FILECMD
-  # Extract the first word of "file", so it can be a program name with args.
-set dummy file; ac_word=$2
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-printf %s "checking for $ac_word... " >&6; }
-if test ${ac_cv_prog_ac_ct_FILECMD+y}
-then :
-  printf %s "(cached) " >&6
-else $as_nop
-  if test -n "$ac_ct_FILECMD"; then
-  ac_cv_prog_ac_ct_FILECMD="$ac_ct_FILECMD" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  case $as_dir in #(((
-    '') as_dir=./ ;;
-    */) ;;
-    *) as_dir=$as_dir/ ;;
-  esac
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_FILECMD="file"
-    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_FILECMD=$ac_cv_prog_ac_ct_FILECMD
-if test -n "$ac_ct_FILECMD"; then
-  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FILECMD" >&5
-printf "%s\n" "$ac_ct_FILECMD" >&6; }
-else
-  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
-fi
-
-  if test "x$ac_ct_FILECMD" = x; then
-    FILECMD=":"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    FILECMD=$ac_ct_FILECMD
-  fi
-else
-  FILECMD="$ac_cv_prog_FILECMD"
-fi
-
-
-
-
-
-
-
 if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
 set dummy ${ac_tool_prefix}objdump; ac_word=$2
@@ -6547,7 +6499,7 @@ beos*)
 
 bsdi[45]*)
   lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
-  lt_cv_file_magic_cmd='$FILECMD -L'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
   lt_cv_file_magic_test_file=/shlib/libc.so
   ;;
 
@@ -6581,14 +6533,14 @@ darwin* | rhapsody*)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
-freebsd* | dragonfly* | midnightbsd*)
+freebsd* | dragonfly*)
   if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
     case $host_cpu in
     i*86 )
       # Not sure whether the presence of OpenBSD here was a mistake.
       # Let's accept both of them until this is cleared up.
       lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
-      lt_cv_file_magic_cmd=$FILECMD
+      lt_cv_file_magic_cmd=/usr/bin/file
       lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
       ;;
     esac
@@ -6602,7 +6554,7 @@ haiku*)
   ;;
 
 hpux10.20* | hpux11*)
-  lt_cv_file_magic_cmd=$FILECMD
+  lt_cv_file_magic_cmd=/usr/bin/file
   case $host_cpu in
   ia64*)
     lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
@@ -6649,7 +6601,7 @@ netbsd*)
 
 newos6*)
   lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
-  lt_cv_file_magic_cmd=$FILECMD
+  lt_cv_file_magic_cmd=/usr/bin/file
   lt_cv_file_magic_test_file=/usr/lib/libnls.so
   ;;
 
@@ -7022,29 +6974,13 @@ esac
 fi
 
 : ${AR=ar}
+: ${AR_FLAGS=cru}
 
 
 
 
 
 
-# Use ARFLAGS variable as AR's operation code to sync the variable naming with
-# Automake.  If both AR_FLAGS and ARFLAGS are specified, AR_FLAGS should have
-# higher priority because thats what people were doing historically (setting
-# ARFLAGS for automake and AR_FLAGS for libtool).  FIXME: Make the AR_FLAGS
-# variable obsoleted/removed.
-
-test ${AR_FLAGS+y} || AR_FLAGS=${ARFLAGS-cr}
-lt_ar_flags=$AR_FLAGS
-
-
-
-
-
-
-# Make AR_FLAGS overridable by 'make ARFLAGS='.  Don't try to run-time override
-# by AR_FLAGS because that was never working and AR_FLAGS is about to die.
-
 
 
 
@@ -7461,7 +7397,7 @@ esac
 
 if test "$lt_cv_nm_interface" = "MS dumpbin"; then
   # Gets list of data symbols to import.
-  lt_cv_sys_global_symbol_to_import="$SED -n -e 's/^I .* \(.*\)$/\1/p'"
+  lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'"
   # Adjust the below global symbol transforms to fixup imported variables.
   lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'"
   lt_c_name_hook=" -e 's/^I .* \(.*\)$/  {\"\1\", (void *) 0},/p'"
@@ -7479,20 +7415,20 @@ fi
 # Transform an extracted symbol line into a proper C declaration.
 # Some systems (esp. on ia64) link data and code symbols differently,
 # so use this general approach.
-lt_cv_sys_global_symbol_to_cdecl="$SED -n"\
+lt_cv_sys_global_symbol_to_cdecl="sed -n"\
 $lt_cdecl_hook\
 " -e 's/^T .* \(.*\)$/extern int \1();/p'"\
 " -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'"
 
 # Transform an extracted symbol line into symbol name and symbol address
-lt_cv_sys_global_symbol_to_c_name_address="$SED -n"\
+lt_cv_sys_global_symbol_to_c_name_address="sed -n"\
 $lt_c_name_hook\
 " -e 's/^: \(.*\) .*$/  {\"\1\", (void *) 0},/p'"\
 " -e 's/^$symcode$symcode* .* \(.*\)$/  {\"\1\", (void *) \&\1},/p'"
 
 # Transform an extracted symbol line into symbol name with lib prefix and
 # symbol address.
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="$SED -n"\
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\
 $lt_c_name_lib_hook\
 " -e 's/^: \(.*\) .*$/  {\"\1\", (void *) 0},/p'"\
 " -e 's/^$symcode$symcode* .* \(lib.*\)$/  {\"\1\", (void *) \&\1},/p'"\
@@ -7516,7 +7452,7 @@ for ac_symprfx in "" "_"; do
   if test "$lt_cv_nm_interface" = "MS dumpbin"; then
     # Fake it for dumpbin and say T for any non-static function,
     # D for any global variable and I for any imported variable.
-    # Also find C++ and __fastcall symbols from MSVC++ or ICC,
+    # Also find C++ and __fastcall symbols from MSVC++,
     # which start with @ or ?.
     lt_cv_sys_global_symbol_pipe="$AWK '"\
 "     {last_section=section; section=\$ 3};"\
@@ -7534,9 +7470,9 @@ for ac_symprfx in "" "_"; do
 "     s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\
 "     ' prfx=^$ac_symprfx"
   else
-    lt_cv_sys_global_symbol_pipe="$SED -n -e 's/^.*[    ]\($symcode$symcode*\)[         ][      ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[     ]\($symcode$symcode*\)[         ][      ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
   fi
-  lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | $SED '/ __gnu_lto/d'"
+  lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
 
   # Check to see that the pipe works correctly.
   pipe_works=no
@@ -7739,7 +7675,7 @@ case $with_sysroot in #(
    fi
    ;; #(
  /*)
-   lt_sysroot=`echo "$with_sysroot" | $SED -e "$sed_quote_subst"`
+   lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
    ;; #(
  no|'')
    ;; #(
@@ -7864,7 +7800,7 @@ ia64-*-hpux*)
   ac_status=$?
   printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-    case `$FILECMD conftest.$ac_objext` in
+    case `/usr/bin/file conftest.$ac_objext` in
       *ELF-32*)
        HPUX_IA64_MODE=32
        ;;
@@ -7885,7 +7821,7 @@ ia64-*-hpux*)
   printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
     if test yes = "$lt_cv_prog_gnu_ld"; then
-      case `$FILECMD conftest.$ac_objext` in
+      case `/usr/bin/file conftest.$ac_objext` in
        *32-bit*)
          LD="${LD-ld} -melf32bsmip"
          ;;
@@ -7897,7 +7833,7 @@ ia64-*-hpux*)
        ;;
       esac
     else
-      case `$FILECMD conftest.$ac_objext` in
+      case `/usr/bin/file conftest.$ac_objext` in
        *32-bit*)
          LD="${LD-ld} -32"
          ;;
@@ -7923,7 +7859,7 @@ mips64*-*linux*)
   printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
     emul=elf
-    case `$FILECMD conftest.$ac_objext` in
+    case `/usr/bin/file conftest.$ac_objext` in
       *32-bit*)
        emul="${emul}32"
        ;;
@@ -7931,7 +7867,7 @@ mips64*-*linux*)
        emul="${emul}64"
        ;;
     esac
-    case `$FILECMD conftest.$ac_objext` in
+    case `/usr/bin/file conftest.$ac_objext` in
       *MSB*)
        emul="${emul}btsmip"
        ;;
@@ -7939,7 +7875,7 @@ mips64*-*linux*)
        emul="${emul}ltsmip"
        ;;
     esac
-    case `$FILECMD conftest.$ac_objext` in
+    case `/usr/bin/file conftest.$ac_objext` in
       *N32*)
        emul="${emul}n32"
        ;;
@@ -7963,14 +7899,14 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
   ac_status=$?
   printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-    case `$FILECMD conftest.o` in
+    case `/usr/bin/file conftest.o` in
       *32-bit*)
        case $host in
          x86_64-*kfreebsd*-gnu)
            LD="${LD-ld} -m elf_i386_fbsd"
            ;;
          x86_64-*linux*)
-           case `$FILECMD conftest.o` in
+           case `/usr/bin/file conftest.o` in
              *x86-64*)
                LD="${LD-ld} -m elf32_x86_64"
                ;;
@@ -8078,7 +8014,7 @@ printf "%s\n" "$lt_cv_cc_needs_belf" >&6; }
   ac_status=$?
   printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-    case `$FILECMD conftest.o` in
+    case `/usr/bin/file conftest.o` in
     *64-bit*)
       case $lt_cv_prog_gnu_ld in
       yes*)
@@ -8861,8 +8797,8 @@ int forced_loaded() { return 2;}
 _LT_EOF
       echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5
       $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
-      echo "$AR $AR_FLAGS libconftest.a conftest.o" >&5
-      $AR $AR_FLAGS libconftest.a conftest.o 2>&5
+      echo "$AR cru libconftest.a conftest.o" >&5
+      $AR cru libconftest.a conftest.o 2>&5
       echo "$RANLIB libconftest.a" >&5
       $RANLIB libconftest.a 2>&5
       cat > conftest.c << _LT_EOF
@@ -8889,12 +8825,17 @@ printf "%s\n" "$lt_cv_ld_force_load" >&6; }
       _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;;
     darwin1.*)
       _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
-    darwin*)
-      case $MACOSX_DEPLOYMENT_TARGET,$host in
-        10.[012],*|,*powerpc*-darwin[5-8]*)
-          _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
-        *)
-          _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
+    darwin*) # darwin 5.x on
+      # if running on 10.5 or later, the deployment target defaults
+      # to the OS version, if on x86, and 10.4, the deployment
+      # target defaults to 10.4. Don't you love it?
+      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+       10.0,*86*-darwin8*|10.0,*-darwin[91]*)
+         _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
+       10.[012][,.]*)
+         _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
+       10.*)
+         _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
       esac
     ;;
   esac
@@ -9253,8 +9194,8 @@ esac
 ofile=libtool
 can_build_shared=yes
 
-# All known linkers require a '.a' archive for static linking (except MSVC and
-# ICC, which need '.lib').
+# All known linkers require a '.a' archive for static linking (except MSVC,
+# which needs '.lib').
 libext=a
 
 with_gnu_ld=$lt_cv_prog_gnu_ld
@@ -9766,7 +9707,7 @@ lt_prog_compiler_static=
        lt_prog_compiler_static='-qstaticlink'
        ;;
       *)
-       case `$CC -V 2>&1 | $SED 5q` in
+       case `$CC -V 2>&1 | sed 5q` in
        *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*)
          # Sun Fortran 8.3 passes all unrecognized flags to the linker
          lt_prog_compiler_pic='-KPIC'
@@ -10189,15 +10130,15 @@ printf %s "checking whether the $compiler linker ($LD) supports shared libraries
 
   case $host_os in
   cygwin* | mingw* | pw32* | cegcc*)
-    # FIXME: the MSVC++ and ICC port hasn't been tested in a loooong time
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
     # When not using gcc, we currently assume that we are using
-    # Microsoft Visual C++ or Intel C++ Compiler.
+    # Microsoft Visual C++.
     if test yes != "$GCC"; then
       with_gnu_ld=no
     fi
     ;;
   interix*)
-    # we just hope/assume this is gcc and not c89 (= MSVC++ or ICC)
+    # we just hope/assume this is gcc and not c89 (= MSVC++)
     with_gnu_ld=yes
     ;;
   openbsd* | bitrig*)
@@ -10249,7 +10190,7 @@ printf %s "checking whether the $compiler linker ($LD) supports shared libraries
       whole_archive_flag_spec=
     fi
     supports_anon_versioning=no
-    case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in
+    case `$LD -v | $SED -e 's/(^)\+)\s\+//' 2>&1` in
       *GNU\ gold*) supports_anon_versioning=yes ;;
       *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
       *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
@@ -10361,7 +10302,6 @@ _LT_EOF
        emximp -o $lib $output_objdir/$libname.def'
       old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
       enable_shared_with_static_runtimes=yes
-      file_list_spec='@'
       ;;
 
     interix[3-9]*)
@@ -10376,7 +10316,7 @@ _LT_EOF
       # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
       # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
       archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-      archive_expsym_cmds='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      archive_expsym_cmds='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
       ;;
 
     gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
@@ -10419,7 +10359,7 @@ _LT_EOF
          compiler_needs_object=yes
          ;;
        esac
-       case `$CC -V 2>&1 | $SED 5q` in
+       case `$CC -V 2>&1 | sed 5q` in
        *Sun\ C*)                       # Sun C 5.9
          whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
          compiler_needs_object=yes
@@ -10431,7 +10371,7 @@ _LT_EOF
 
         if test yes = "$supports_anon_versioning"; then
           archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
-            cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+            cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
             echo "local: *; };" >> $output_objdir/$libname.ver~
             $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
         fi
@@ -10447,7 +10387,7 @@ _LT_EOF
          archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
          if test yes = "$supports_anon_versioning"; then
            archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
-              cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+              cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
               echo "local: *; };" >> $output_objdir/$libname.ver~
               $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
          fi
@@ -10579,7 +10519,7 @@ _LT_EOF
        if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
          export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
        else
-         export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
+         export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
        fi
        aix_use_runtimelinking=no
 
 
     cygwin* | mingw* | pw32* | cegcc*)
       # When not using gcc, we currently assume that we are using
-      # Microsoft Visual C++ or Intel C++ Compiler.
+      # Microsoft Visual C++.
       # hardcode_libdir_flag_spec is actually meaningless, as there is
       # no search path for DLLs.
       case $cc_basename in
-      cl* | icl*)
-       # Native MSVC or ICC
+      cl*)
+       # Native MSVC
        hardcode_libdir_flag_spec=' '
        allow_undefined_flag=unsupported
        always_export_symbols=yes
@@ -10896,7 +10836,7 @@ fi
           fi'
        ;;
       *)
-       # Assume MSVC and ICC wrapper
+       # Assume MSVC wrapper
        hardcode_libdir_flag_spec=' '
        allow_undefined_flag=unsupported
        # Tell ltmain to make .lib files, not .a files.
@@ -10937,8 +10877,8 @@ fi
     output_verbose_link_cmd=func_echo_all
     archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil"
     module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil"
-    archive_expsym_cmds="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
-    module_expsym_cmds="$SED -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
+    archive_expsym_cmds="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
+    module_expsym_cmds="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
 
   else
   ld_shlibs=no
@@ -10972,7 +10912,7 @@ fi
       ;;
 
     # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
-    freebsd* | dragonfly* | midnightbsd*)
+    freebsd* | dragonfly*)
       archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
       hardcode_libdir_flag_spec='-R$libdir'
       hardcode_direct=yes
@@ -11223,7 +11163,6 @@ printf "%s\n" "$lt_cv_irix_exported_symbol" >&6; }
        emximp -o $lib $output_objdir/$libname.def'
       old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
       enable_shared_with_static_runtimes=yes
-      file_list_spec='@'
       ;;
 
     osf3*)
@@ -11916,7 +11855,7 @@ cygwin* | mingw* | pw32* | cegcc*)
     case $host_os in
     cygwin*)
       # Cygwin DLLs use 'cyg' prefix rather than 'lib'
-      soname_spec='`echo $libname | $SED -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+      soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
 
       sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"
       ;;
@@ -11926,14 +11865,14 @@ cygwin* | mingw* | pw32* | cegcc*)
       ;;
     pw32*)
       # pw32 DLLs use 'pw' prefix rather than 'lib'
-      library_names_spec='`echo $libname | $SED -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+      library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
       ;;
     esac
     dynamic_linker='Win32 ld.exe'
     ;;
 
-  *,cl* | *,icl*)
-    # Native MSVC or ICC
+  *,cl*)
+    # Native MSVC
     libname_spec='$name'
     soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
     library_names_spec='$libname.dll.lib'
@@ -11952,7 +11891,7 @@ cygwin* | mingw* | pw32* | cegcc*)
       done
       IFS=$lt_save_ifs
       # Convert to MSYS style.
-      sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
+      sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
       ;;
     cygwin*)
       # Convert to unix form, then to dos form, then back to unix form
@@ -11989,7 +11928,7 @@ cygwin* | mingw* | pw32* | cegcc*)
     ;;
 
   *)
-    # Assume MSVC and ICC wrapper
+    # Assume MSVC wrapper
     library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib'
     dynamic_linker='Win32 ld.exe'
     ;;
@@ -12022,7 +11961,7 @@ dgux*)
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
-freebsd* | dragonfly* | midnightbsd*)
+freebsd* | dragonfly*)
   # DragonFly does not have aout.  When/if they implement a new
   # versioning mechanism, adjust this.
   if test -x /usr/bin/objformat; then
@@ -13178,41 +13117,30 @@ striplib=
 old_striplib=
 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5
 printf %s "checking whether stripping libraries is possible... " >&6; }
-if test -z "$STRIP"; then
-  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
-else
-  if $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
-    old_striplib="$STRIP --strip-debug"
-    striplib="$STRIP --strip-unneeded"
-    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 printf "%s\n" "yes" >&6; }
-  else
-    case $host_os in
-    darwin*)
-      # FIXME - insert some real tests, host_os isn't really good enough
+else
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+  darwin*)
+    if test -n "$STRIP"; then
       striplib="$STRIP -x"
       old_striplib="$STRIP -S"
       { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 printf "%s\n" "yes" >&6; }
-      ;;
-    freebsd*)
-      if $STRIP -V 2>&1 | $GREP "elftoolchain" >/dev/null; then
-        old_striplib="$STRIP --strip-debug"
-        striplib="$STRIP --strip-unneeded"
-        { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-printf "%s\n" "yes" >&6; }
-      else
-        { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
-      fi
-      ;;
-    *)
+    else
       { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
 printf "%s\n" "no" >&6; }
-      ;;
-    esac
-  fi
+    fi
+    ;;
+  *)
+    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+    ;;
+  esac
 fi
 
 
@@ -13305,7 +13233,7 @@ CC=$lt_save_CC
 printf "%s\n"
            printf "%s\n" "--- Checking for external programs ---"
 # libguestfs
-# Copyright (C) 2009-2021 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -13472,6 +13400,57 @@ printf "%s\n" "no, using $LN_S" >&6; }
 fi
 
 
+for ac_prog in grealpath realpath
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+printf %s "checking for $ac_word... " >&6; }
+if test ${ac_cv_prog_REALPATH+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  if test -n "$REALPATH"; then
+  ac_cv_prog_REALPATH="$REALPATH" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  case $as_dir in #(((
+    '') as_dir=./ ;;
+    */) ;;
+    *) as_dir=$as_dir/ ;;
+  esac
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
+    ac_cv_prog_REALPATH="$ac_prog"
+    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+REALPATH=$ac_cv_prog_REALPATH
+if test -n "$REALPATH"; then
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $REALPATH" >&5
+printf "%s\n" "$REALPATH" >&6; }
+else
+  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+  test -n "$REALPATH" && break
+done
+test -n "$REALPATH" || REALPATH="no"
+
+test "x$REALPATH" = "xno" &&
+    as_fn_error $? "GNU realpath program must be installed" "$LINENO" 5
+
 for ac_prog in xorrisofs genisoimage mkisofs
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
@@ -14177,7 +14156,7 @@ fi
 printf "%s\n"
            printf "%s\n" "--- Checking for the C compiler environment ---"
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -14671,7 +14650,7 @@ CFLAGS="${acx_nbdkit_save_CFLAGS}"
 printf "%s\n"
            printf "%s\n" "--- Checking for libraries used by libguestfs ---"
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -14827,12 +14806,12 @@ if test -n "$LIBGUESTFS_CFLAGS"; then
     pkg_cv_LIBGUESTFS_CFLAGS="$LIBGUESTFS_CFLAGS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
-    { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libguestfs >= 1.44\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "libguestfs >= 1.44") 2>&5
+    { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libguestfs >= 1.49.8\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "libguestfs >= 1.49.8") 2>&5
   ac_status=$?
   printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_LIBGUESTFS_CFLAGS=`$PKG_CONFIG --cflags "libguestfs >= 1.44" 2>/dev/null`
+  pkg_cv_LIBGUESTFS_CFLAGS=`$PKG_CONFIG --cflags "libguestfs >= 1.49.8" 2>/dev/null`
                      test "x$?" != "x0" && pkg_failed=yes
 else
   pkg_failed=yes
@@ -14844,12 +14823,12 @@ if test -n "$LIBGUESTFS_LIBS"; then
     pkg_cv_LIBGUESTFS_LIBS="$LIBGUESTFS_LIBS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
-    { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libguestfs >= 1.44\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "libguestfs >= 1.44") 2>&5
+    { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libguestfs >= 1.49.8\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "libguestfs >= 1.49.8") 2>&5
   ac_status=$?
   printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_LIBGUESTFS_LIBS=`$PKG_CONFIG --libs "libguestfs >= 1.44" 2>/dev/null`
+  pkg_cv_LIBGUESTFS_LIBS=`$PKG_CONFIG --libs "libguestfs >= 1.49.8" 2>/dev/null`
                      test "x$?" != "x0" && pkg_failed=yes
 else
   pkg_failed=yes
@@ -14870,14 +14849,14 @@ else
         _pkg_short_errors_supported=no
 fi
         if test $_pkg_short_errors_supported = yes; then
-               LIBGUESTFS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libguestfs >= 1.44" 2>&1`
+               LIBGUESTFS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libguestfs >= 1.49.8" 2>&1`
         else
-               LIBGUESTFS_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libguestfs >= 1.44" 2>&1`
+               LIBGUESTFS_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libguestfs >= 1.49.8" 2>&1`
         fi
        # Put the nasty error message in config.log where it belongs
        echo "$LIBGUESTFS_PKG_ERRORS" >&5
 
-       as_fn_error $? "Package requirements (libguestfs >= 1.44) were not met:
+       as_fn_error $? "Package requirements (libguestfs >= 1.49.8) were not met:
 
 $LIBGUESTFS_PKG_ERRORS
 
@@ -14910,6 +14889,148 @@ printf "%s\n" "yes" >&6; }
 
 fi
 
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5
+printf %s "checking for $CC options needed to detect all undeclared functions... " >&6; }
+if test ${ac_cv_c_undeclared_builtin_options+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+  ac_save_CFLAGS=$CFLAGS
+   ac_cv_c_undeclared_builtin_options='cannot detect'
+   for ac_arg in '' -fno-builtin; do
+     CFLAGS="$ac_save_CFLAGS $ac_arg"
+     # This test program should *not* compile successfully.
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main (void)
+{
+(void) strchr;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+
+else $as_nop
+  # This test program should compile successfully.
+        # No library function is consistently available on
+        # freestanding implementations, so test against a dummy
+        # declaration.  Include always-available headers on the
+        # off chance that they somehow elicit warnings.
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <float.h>
+#include <limits.h>
+#include <stdarg.h>
+#include <stddef.h>
+extern void ac_decl (int, char *);
+
+int
+main (void)
+{
+(void) ac_decl (0, (char *) 0);
+  (void) ac_decl;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+  if test x"$ac_arg" = x
+then :
+  ac_cv_c_undeclared_builtin_options='none needed'
+else $as_nop
+  ac_cv_c_undeclared_builtin_options=$ac_arg
+fi
+          break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+    done
+    CFLAGS=$ac_save_CFLAGS
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_undeclared_builtin_options" >&5
+printf "%s\n" "$ac_cv_c_undeclared_builtin_options" >&6; }
+  case $ac_cv_c_undeclared_builtin_options in #(
+  'cannot detect') :
+    { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot make $CC report undeclared builtins
+See \`config.log' for more details" "$LINENO" 5; } ;; #(
+  'none needed') :
+    ac_c_undeclared_builtin_options='' ;; #(
+  *) :
+    ac_c_undeclared_builtin_options=$ac_cv_c_undeclared_builtin_options ;;
+esac
+
+ac_fn_check_decl "$LINENO" "strerror_r" "ac_cv_have_decl_strerror_r" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS"
+if test "x$ac_cv_have_decl_strerror_r" = xyes
+then :
+  ac_have_decl=1
+else $as_nop
+  ac_have_decl=0
+fi
+printf "%s\n" "#define HAVE_DECL_STRERROR_R $ac_have_decl" >>confdefs.h
+
+
+if test $ac_cv_have_decl_strerror_r = yes; then
+  # For backward compatibility's sake, define HAVE_STRERROR_R.
+  # (We used to run AC_CHECK_FUNCS_ONCE for strerror_r, as well
+  # as AC_CHECK_DECLS_ONCE.)
+
+printf "%s\n" "#define HAVE_STRERROR_R 1" >>confdefs.h
+
+fi
+
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether strerror_r returns char *" >&5
+printf %s "checking whether strerror_r returns char *... " >&6; }
+if test ${ac_cv_func_strerror_r_char_p+y}
+then :
+  printf %s "(cached) " >&6
+else $as_nop
+
+    ac_cv_func_strerror_r_char_p=no
+    if test $ac_cv_have_decl_strerror_r = yes; then
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <string.h>
+int
+main (void)
+{
+
+         char buf[100];
+         char x = *strerror_r (0, buf, sizeof buf);
+         char *p = strerror_r (0, buf, sizeof buf);
+         return !p || x;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+  ac_cv_func_strerror_r_char_p=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+    fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strerror_r_char_p" >&5
+printf "%s\n" "$ac_cv_func_strerror_r_char_p" >&6; }
+if test $ac_cv_func_strerror_r_char_p = yes; then
+
+printf "%s\n" "#define STRERROR_R_CHAR_P 1" >>confdefs.h
+
+fi
+
+
 
 printf "%s\n" "#define host_cpu \"$host_cpu\"" >>confdefs.h
 
@@ -14926,10 +15047,10 @@ then :
   printf "%s\n" "#define HAVE_ENDIAN_H 1" >>confdefs.h
 
 fi
-ac_fn_c_check_header_compile "$LINENO" "sys/endian.h" "ac_cv_header_sys_endian_h" "$ac_includes_default"
-if test "x$ac_cv_header_sys_endian_h" = xyes
+ac_fn_c_check_header_compile "$LINENO" "error.h" "ac_cv_header_error_h" "$ac_includes_default"
+if test "x$ac_cv_header_error_h" = xyes
 then :
-  printf "%s\n" "#define HAVE_SYS_ENDIAN_H 1" >>confdefs.h
+  printf "%s\n" "#define HAVE_ERROR_H 1" >>confdefs.h
 
 fi
 ac_fn_c_check_header_compile "$LINENO" "errno.h" "ac_cv_header_errno_h" "$ac_includes_default"
@@ -14967,6 +15088,12 @@ if test "x$ac_cv_header_printf_h" = xyes
 then :
   printf "%s\n" "#define HAVE_PRINTF_H 1" >>confdefs.h
 
+fi
+ac_fn_c_check_header_compile "$LINENO" "sys/endian.h" "ac_cv_header_sys_endian_h" "$ac_includes_default"
+if test "x$ac_cv_header_sys_endian_h" = xyes
+then :
+  printf "%s\n" "#define HAVE_SYS_ENDIAN_H 1" >>confdefs.h
+
 fi
 ac_fn_c_check_header_compile "$LINENO" "sys/inotify.h" "ac_cv_header_sys_inotify_h" "$ac_includes_default"
 if test "x$ac_cv_header_sys_inotify_h" = xyes
@@ -15053,6 +15180,12 @@ if test "x$ac_cv_func_be32toh" = xyes
 then :
   printf "%s\n" "#define HAVE_BE32TOH 1" >>confdefs.h
 
+fi
+ac_fn_c_check_func "$LINENO" "error" "ac_cv_func_error"
+if test "x$ac_cv_func_error" = xyes
+then :
+  printf "%s\n" "#define HAVE_ERROR 1" >>confdefs.h
+
 fi
 ac_fn_c_check_func "$LINENO" "fsync" "ac_cv_func_fsync"
 if test "x$ac_cv_func_fsync" = xyes
@@ -15065,6 +15198,12 @@ if test "x$ac_cv_func_futimens" = xyes
 then :
   printf "%s\n" "#define HAVE_FUTIMENS 1" >>confdefs.h
 
+fi
+ac_fn_c_check_func "$LINENO" "getprogname" "ac_cv_func_getprogname"
+if test "x$ac_cv_func_getprogname" = xyes
+then :
+  printf "%s\n" "#define HAVE_GETPROGNAME 1" >>confdefs.h
+
 fi
 ac_fn_c_check_func "$LINENO" "getxattr" "ac_cv_func_getxattr"
 if test "x$ac_cv_func_getxattr" = xyes
@@ -17345,6 +17484,7 @@ fi
 
 
 
+
 
 
     { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5
@@ -18373,8 +18513,7 @@ printf "%s\n" "$ac_res" >&6; }
                                         if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \
            || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \
                 && test "$PACKAGE" != gettext-runtime \
-                && test "$PACKAGE" != gettext-tools \
-                && test "$PACKAGE" != libintl; }; then
+                && test "$PACKAGE" != gettext-tools; }; then
           gt_use_preinstalled_gnugettext=yes
         else
                     LIBINTL=
@@ -18468,9 +18607,7 @@ printf "%s\n" "#define HAVE_DCGETTEXT 1" >>confdefs.h
 
 
 
-
-        INTLLIBS="$LIBINTL"
-
+    INTLLIBS="$LIBINTL"
 
 
 
@@ -18976,10 +19113,102 @@ printf "%s\n" "yes" >&6; }
 fi
 
 
+pkg_failed=no
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for LIBOSINFO" >&5
+printf %s "checking for LIBOSINFO... " >&6; }
+
+if test -n "$LIBOSINFO_CFLAGS"; then
+    pkg_cv_LIBOSINFO_CFLAGS="$LIBOSINFO_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libosinfo-1.0\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "libosinfo-1.0") 2>&5
+  ac_status=$?
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_LIBOSINFO_CFLAGS=`$PKG_CONFIG --cflags "libosinfo-1.0" 2>/dev/null`
+                     test "x$?" != "x0" && pkg_failed=yes
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$LIBOSINFO_LIBS"; then
+    pkg_cv_LIBOSINFO_LIBS="$LIBOSINFO_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libosinfo-1.0\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "libosinfo-1.0") 2>&5
+  ac_status=$?
+  printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_LIBOSINFO_LIBS=`$PKG_CONFIG --libs "libosinfo-1.0" 2>/dev/null`
+                     test "x$?" != "x0" && pkg_failed=yes
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+       { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+               LIBOSINFO_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libosinfo-1.0" 2>&1`
+        else
+               LIBOSINFO_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libosinfo-1.0" 2>&1`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$LIBOSINFO_PKG_ERRORS" >&5
+
+       as_fn_error $? "Package requirements (libosinfo-1.0) were not met:
+
+$LIBOSINFO_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables LIBOSINFO_CFLAGS
+and LIBOSINFO_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details." "$LINENO" 5
+elif test $pkg_failed = untried; then
+       { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+       { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables LIBOSINFO_CFLAGS
+and LIBOSINFO_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details" "$LINENO" 5; }
+else
+       LIBOSINFO_CFLAGS=$pkg_cv_LIBOSINFO_CFLAGS
+       LIBOSINFO_LIBS=$pkg_cv_LIBOSINFO_LIBS
+        { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+
+fi
+
+
 printf "%s\n"
            printf "%s\n" "--- Checking for OCaml compiler and libguestfs bindings ---"
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -18999,7 +19228,7 @@ printf "%s\n"
 
 
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -20474,7 +20703,7 @@ OCAML_FLAGS="-g -annot $safe_string_option"
 printf "%s\n"
            printf "%s\n" "--- Checking for Perl ---"
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -20631,7 +20860,7 @@ fi
 printf "%s\n"
            printf "%s\n" "--- Checking for other libraries ---"
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -20967,7 +21196,7 @@ fi
 printf "%s\n"
            printf "%s\n" "--- Checking for bash completion ---"
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -21118,7 +21347,7 @@ ac_config_files="$ac_config_files run"
 ac_config_files="$ac_config_files win-reg/virt-win-reg"
 
 
-ac_config_files="$ac_config_files Makefile align/Makefile bash/Makefile builder/Makefile builder/libguestfs.conf builder/opensuse.conf builder/templates/Makefile builder/test-config/virt-builder/repos.d/test-index.conf builder/test-simplestreams/virt-builder/repos.d/cirros.conf builder/test-website/virt-builder/repos.d/libguestfs.conf cat/Makefile common/edit/Makefile common/mlcustomize/Makefile common/mlgettext/Makefile common/mlpcre/Makefile common/mlprogress/Makefile common/mlstdutils/Makefile common/mlstdutils/guestfs_config.ml common/mltools/Makefile common/mlutils/Makefile common/mlvisit/Makefile common/mlxml/Makefile common/options/Makefile common/parallel/Makefile common/progress/Makefile common/structs/Makefile common/utils/Makefile common/visit/Makefile common/windows/Makefile config.sh customize/Makefile docs/Makefile df/Makefile dib/Makefile diff/Makefile edit/Makefile format/Makefile get-kernel/Makefile gnulib/lib/Makefile inspector/Makefile make-fs/Makefile po-docs/Makefile po-docs/ja/Makefile po-docs/uk/Makefile po/Makefile resize/Makefile sparsify/Makefile sysprep/Makefile test-data/Makefile test-data/binaries/Makefile test-data/blank-disks/Makefile test-data/files/Makefile test-data/phony-guests/Makefile test-data/phony-guests/guests.xml win-reg/Makefile"
+ac_config_files="$ac_config_files Makefile align/Makefile bash/Makefile builder/Makefile builder/libguestfs.conf builder/opensuse.conf builder/templates/Makefile builder/test-config/virt-builder/repos.d/test-index.conf builder/test-simplestreams/virt-builder/repos.d/cirros.conf builder/test-website/virt-builder/repos.d/libguestfs.conf cat/Makefile common/edit/Makefile common/mlcustomize/Makefile common/mldrivers/Makefile common/mlgettext/Makefile common/mlpcre/Makefile common/mlprogress/Makefile common/mlstdutils/Makefile common/mlstdutils/guestfs_config.ml common/mltools/Makefile common/mlutils/Makefile common/mlvisit/Makefile common/mlxml/Makefile common/options/Makefile common/parallel/Makefile common/progress/Makefile common/structs/Makefile common/utils/Makefile common/visit/Makefile common/windows/Makefile config.sh customize/Makefile docs/Makefile df/Makefile dib/Makefile diff/Makefile drivers/Makefile edit/Makefile format/Makefile get-kernel/Makefile gnulib/lib/Makefile inspector/Makefile make-fs/Makefile po-docs/Makefile po-docs/ja/Makefile po-docs/uk/Makefile po/Makefile resize/Makefile sparsify/Makefile sysprep/Makefile test-data/Makefile test-data/binaries/Makefile test-data/blank-disks/Makefile test-data/files/Makefile test-data/phony-guests/Makefile test-data/phony-guests/guests.xml win-reg/Makefile"
 
 
 cat >confcache <<\_ACEOF
@@ -21704,7 +21933,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by guestfs-tools $as_me 1.48.3, which was
+This file was extended by guestfs-tools $as_me 1.50.0, which was
 generated by GNU Autoconf 2.71.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -21772,7 +22001,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config='$ac_cs_config_escaped'
 ac_cs_version="\\
-guestfs-tools config.status 1.48.3
+guestfs-tools config.status 1.50.0
 configured by $0, generated by GNU Autoconf 2.71,
   with options \\"\$ac_cs_config\\"
 
@@ -21935,7 +22164,6 @@ lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_q
 lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
 reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
 reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
-FILECMD='`$ECHO "$FILECMD" | $SED "$delay_single_quote_subst"`'
 OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
 deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
 file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
@@ -21944,7 +22172,6 @@ want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
 DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
 sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
 AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
-lt_ar_flags='`$ECHO "$lt_ar_flags" | $SED "$delay_single_quote_subst"`'
 AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
 archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`'
 STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
@@ -22065,7 +22292,6 @@ LN_S \
 lt_SP2NL \
 lt_NL2SP \
 reload_flag \
-FILECMD \
 OBJDUMP \
 deplibs_check_method \
 file_magic_cmd \
@@ -22074,6 +22300,7 @@ want_nocaseglob \
 DLLTOOL \
 sharedlib_from_linklib_cmd \
 AR \
+AR_FLAGS \
 archiver_list_spec \
 STRIP \
 RANLIB \
@@ -22214,6 +22441,7 @@ do
     "cat/Makefile") CONFIG_FILES="$CONFIG_FILES cat/Makefile" ;;
     "common/edit/Makefile") CONFIG_FILES="$CONFIG_FILES common/edit/Makefile" ;;
     "common/mlcustomize/Makefile") CONFIG_FILES="$CONFIG_FILES common/mlcustomize/Makefile" ;;
+    "common/mldrivers/Makefile") CONFIG_FILES="$CONFIG_FILES common/mldrivers/Makefile" ;;
     "common/mlgettext/Makefile") CONFIG_FILES="$CONFIG_FILES common/mlgettext/Makefile" ;;
     "common/mlpcre/Makefile") CONFIG_FILES="$CONFIG_FILES common/mlpcre/Makefile" ;;
     "common/mlprogress/Makefile") CONFIG_FILES="$CONFIG_FILES common/mlprogress/Makefile" ;;
@@ -22236,6 +22464,7 @@ do
     "df/Makefile") CONFIG_FILES="$CONFIG_FILES df/Makefile" ;;
     "dib/Makefile") CONFIG_FILES="$CONFIG_FILES dib/Makefile" ;;
     "diff/Makefile") CONFIG_FILES="$CONFIG_FILES diff/Makefile" ;;
+    "drivers/Makefile") CONFIG_FILES="$CONFIG_FILES drivers/Makefile" ;;
     "edit/Makefile") CONFIG_FILES="$CONFIG_FILES edit/Makefile" ;;
     "format/Makefile") CONFIG_FILES="$CONFIG_FILES format/Makefile" ;;
     "get-kernel/Makefile") CONFIG_FILES="$CONFIG_FILES get-kernel/Makefile" ;;
@@ -23082,9 +23311,6 @@ to_host_file_cmd=$lt_cv_to_host_file_cmd
 # convert \$build files to toolchain format.
 to_tool_file_cmd=$lt_cv_to_tool_file_cmd
 
-# A file(cmd) program that detects file types.
-FILECMD=$lt_FILECMD
-
 # An object symbol dumper.
 OBJDUMP=$lt_OBJDUMP
 
@@ -23109,11 +23335,8 @@ sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
 # The archiver.
 AR=$lt_AR
 
-# Flags to create an archive (by configure).
-lt_ar_flags=$lt_ar_flags
-
 # Flags to create an archive.
-AR_FLAGS=\${ARFLAGS-"\$lt_ar_flags"}
+AR_FLAGS=$lt_AR_FLAGS
 
 # How to feed a file listing to the archiver.
 archiver_list_spec=$lt_archiver_list_spec
@@ -23489,7 +23712,7 @@ ltmain=$ac_aux_dir/ltmain.sh
   # if finds mixed CR/LF and LF-only lines.  Since sed operates in
   # text mode, it properly converts lines to CR/LF.  This bash problem
   # is reportedly fixed, but why not run on old versions too?
-  $SED '$q' "$ltmain" >> "$cfgfile" \
+  sed '$q' "$ltmain" >> "$cfgfile" \
      || (rm -f "$cfgfile"; exit 1)
 
    mv -f "$cfgfile" "$ofile" ||
index 32b6fd4719486d957540c80feacec977cdcd078f..1f8acced2ddd8d00f670cb5ca3736b66f9889d93 100644 (file)
@@ -1,5 +1,5 @@
 # libguestfs
-# Copyright (C) 2009-2021 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -15,7 +15,7 @@
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
-AC_INIT([guestfs-tools], [1.48.3])
+AC_INIT([guestfs-tools], [1.50.0])
 
 dnl The common/ subdirectory assumes this.  In libguestfs it contains
 dnl the --with-extra parameter.  Here we just define it to the version.
@@ -115,6 +115,7 @@ AC_CONFIG_FILES([Makefile
                  cat/Makefile
                  common/edit/Makefile
                  common/mlcustomize/Makefile
+                 common/mldrivers/Makefile
                  common/mlgettext/Makefile
                  common/mlpcre/Makefile
                  common/mlprogress/Makefile
@@ -137,6 +138,7 @@ AC_CONFIG_FILES([Makefile
                  df/Makefile
                  dib/Makefile
                  diff/Makefile
+                 drivers/Makefile
                  edit/Makefile
                  format/Makefile
                  get-kernel/Makefile
index 6bdd5fae91e6a6d40425a2544fc54c2cd8bc0abe..3a974590fd41964449569422ad509568f6805f97 100644 (file)
@@ -1,5 +1,5 @@
 # virt-customize
-# Copyright (C) 2014-2020 Red Hat Inc.
+# Copyright (C) 2014-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -107,6 +107,7 @@ libcustomize_a_CFLAGS = \
        $(LIBCRYPT_CFLAGS) \
        $(LIBVIRT_CFLAGS) \
        $(LIBXML2_CFLAGS) \
+       $(LIBOSINFO_CFLAGS) \
        -fPIC
 
 BOBJECTS = $(SOURCES_ML:.ml=.cmo)
@@ -127,6 +128,7 @@ OCAMLPACKAGES = \
        -I $(top_builddir)/common/mlutils \
        -I $(top_builddir)/common/mlgettext \
        -I $(top_builddir)/common/mlpcre \
+       -I $(top_builddir)/common/mlxml \
        -I $(top_builddir)/common/mltools \
        -I $(top_builddir)/common/mlcustomize \
        -I $(builddir)
@@ -159,6 +161,7 @@ OCAMLLINKFLAGS = \
        mlguestfs.$(MLARCHIVE) \
        mlgettext.$(MLARCHIVE) \
        mlpcre.$(MLARCHIVE) \
+       mlxml.$(MLARCHIVE) \
        mlcutils.$(MLARCHIVE) \
        mltools.$(MLARCHIVE) \
        mlcustomize.$(MLARCHIVE) \
@@ -173,6 +176,7 @@ OCAMLCLIBS = \
        $(LIBCRYPT_LIBS) \
        $(LIBVIRT_LIBS) \
        $(LIBXML2_LIBS) \
+       $(LIBOSINFO_LIBS) \
        $(LIBINTL) \
        -lgnu
 
@@ -186,6 +190,7 @@ virt_customize_DEPENDENCIES = \
        ../common/mlutils/mlcutils.$(MLARCHIVE) \
        ../common/mlgettext/mlgettext.$(MLARCHIVE) \
        ../common/mlpcre/mlpcre.$(MLARCHIVE) \
+       ../common/mlxml/mlxml.$(MLARCHIVE) \
        ../common/mltools/mltools.$(MLARCHIVE) \
        ../common/mlcustomize/mlcustomize.$(MLARCHIVE)
 virt_customize_LINK = \
index f4bf6b3dd00ed1b74fe766345c4a190275ecffb1..5bf84ecf6bb58f1a78ac29ea7e600f16ac54724b 100644 (file)
@@ -15,7 +15,7 @@
 @SET_MAKE@
 
 # virt-customize
-# Copyright (C) 2014-2020 Red Hat Inc.
+# Copyright (C) 2014-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -32,7 +32,7 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -509,7 +509,6 @@ EGREP = @EGREP@
 ETAGS = @ETAGS@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FILECMD = @FILECMD@
 GCC_VISIBILITY_HIDDEN = @GCC_VISIBILITY_HIDDEN@
 GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
 GMSGFMT = @GMSGFMT@
@@ -538,6 +537,8 @@ LIBINTL = @LIBINTL@
 LIBLZMA_CFLAGS = @LIBLZMA_CFLAGS@
 LIBLZMA_LIBS = @LIBLZMA_LIBS@
 LIBOBJS = @LIBOBJS@
+LIBOSINFO_CFLAGS = @LIBOSINFO_CFLAGS@
+LIBOSINFO_LIBS = @LIBOSINFO_LIBS@
 LIBS = @LIBS@
 LIBTINFO_CFLAGS = @LIBTINFO_CFLAGS@
 LIBTINFO_LIBS = @LIBTINFO_LIBS@
@@ -608,6 +609,7 @@ PO4A_TRANSLATE = @PO4A_TRANSLATE@
 PODWRAPPER = @PODWRAPPER@
 POSUB = @POSUB@
 RANLIB = @RANLIB@
+REALPATH = @REALPATH@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
@@ -825,6 +827,7 @@ BUILT_SOURCES = \
 @HAVE_OCAML_TRUE@      $(LIBCRYPT_CFLAGS) \
 @HAVE_OCAML_TRUE@      $(LIBVIRT_CFLAGS) \
 @HAVE_OCAML_TRUE@      $(LIBXML2_CFLAGS) \
+@HAVE_OCAML_TRUE@      $(LIBOSINFO_CFLAGS) \
 @HAVE_OCAML_TRUE@      -fPIC
 
 @HAVE_OCAML_TRUE@BOBJECTS = $(SOURCES_ML:.ml=.cmo)
@@ -839,6 +842,7 @@ BUILT_SOURCES = \
 @HAVE_OCAML_TRUE@      $(top_builddir)/common/mlutils -I \
 @HAVE_OCAML_TRUE@      $(top_builddir)/common/mlgettext -I \
 @HAVE_OCAML_TRUE@      $(top_builddir)/common/mlpcre -I \
+@HAVE_OCAML_TRUE@      $(top_builddir)/common/mlxml -I \
 @HAVE_OCAML_TRUE@      $(top_builddir)/common/mltools -I \
 @HAVE_OCAML_TRUE@      $(top_builddir)/common/mlcustomize -I \
 @HAVE_OCAML_TRUE@      $(builddir) $(am__append_1)
@@ -853,6 +857,7 @@ BUILT_SOURCES = \
 @HAVE_OCAML_TRUE@      mlguestfs.$(MLARCHIVE) \
 @HAVE_OCAML_TRUE@      mlgettext.$(MLARCHIVE) \
 @HAVE_OCAML_TRUE@      mlpcre.$(MLARCHIVE) \
+@HAVE_OCAML_TRUE@      mlxml.$(MLARCHIVE) \
 @HAVE_OCAML_TRUE@      mlcutils.$(MLARCHIVE) \
 @HAVE_OCAML_TRUE@      mltools.$(MLARCHIVE) \
 @HAVE_OCAML_TRUE@      mlcustomize.$(MLARCHIVE) \
@@ -867,6 +872,7 @@ BUILT_SOURCES = \
 @HAVE_OCAML_TRUE@      $(LIBCRYPT_LIBS) \
 @HAVE_OCAML_TRUE@      $(LIBVIRT_LIBS) \
 @HAVE_OCAML_TRUE@      $(LIBXML2_LIBS) \
+@HAVE_OCAML_TRUE@      $(LIBOSINFO_LIBS) \
 @HAVE_OCAML_TRUE@      $(LIBINTL) \
 @HAVE_OCAML_TRUE@      -lgnu
 
@@ -879,6 +885,7 @@ BUILT_SOURCES = \
 @HAVE_OCAML_TRUE@      ../common/mlutils/mlcutils.$(MLARCHIVE) \
 @HAVE_OCAML_TRUE@      ../common/mlgettext/mlgettext.$(MLARCHIVE) \
 @HAVE_OCAML_TRUE@      ../common/mlpcre/mlpcre.$(MLARCHIVE) \
+@HAVE_OCAML_TRUE@      ../common/mlxml/mlxml.$(MLARCHIVE) \
 @HAVE_OCAML_TRUE@      ../common/mltools/mltools.$(MLARCHIVE) \
 @HAVE_OCAML_TRUE@      ../common/mlcustomize/mlcustomize.$(MLARCHIVE)
 
index 9326baa00f75c382f61930945aff616de296f482..3c24315deec6e0323b099fa923b11294d2dd7d2e 100644 (file)
@@ -4,7 +4,7 @@
  *          and from the code in the generator/ subdirectory.
  * ANY CHANGES YOU MAKE TO THIS FILE WILL BE LOST.
  *
- * Copyright (C) 2009-2020 Red Hat Inc.
+ * Copyright (C) 2009-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -59,6 +59,10 @@ and op = [
       (* --firstboot-install PKG,PKG.. *)
   | `Hostname of string
       (* --hostname HOSTNAME *)
+  | `InjectQemuGA of string
+      (* --inject-qemu-ga METHOD *)
+  | `InjectVirtioWin of string
+      (* --inject-virtio-win METHOD *)
   | `InstallPackages of string list
       (* --install PKG,PKG.. *)
   | `Link of string * string list
@@ -109,7 +113,9 @@ and flags = {
       (* --no-logfile *)
   password_crypto : Password.password_crypto option;
       (* --password-crypto md5|sha256|sha512 *)
-  selinux_relabel : bool;
+  no_selinux_relabel : bool;
+      (* --no-selinux-relabel *)
+  selinux_relabel_ignored : bool;
       (* --selinux-relabel *)
   sm_credentials : Subscription_manager.sm_credentials option;
       (* --sm-credentials SELECTOR *)
@@ -121,7 +127,8 @@ let rec argspec () =
   let ops = ref [] in
   let scrub_logfile = ref false in
   let password_crypto = ref None in
-  let selinux_relabel = ref false in
+  let no_selinux_relabel = ref false in
+  let selinux_relabel_ignored = ref false in
   let sm_credentials = ref None in
 
   let rec get_ops () = {
@@ -131,7 +138,8 @@ let rec argspec () =
   and get_flags () = {
     scrub_logfile = !scrub_logfile;
     password_crypto = !password_crypto;
-    selinux_relabel = !selinux_relabel;
+    no_selinux_relabel = !no_selinux_relabel;
+    selinux_relabel_ignored = !selinux_relabel_ignored;
     sm_credentials = !sm_credentials;
   }
   in
@@ -258,6 +266,18 @@ let rec argspec () =
       s_"Set the hostname"
     ),
     Some "HOSTNAME", "Set the hostname of the guest to C<HOSTNAME>.  You can use a\ndotted hostname.domainname (FQDN) if you want.";
+    (
+      [ L"inject-qemu-ga" ],
+      Getopt.String (s_"METHOD", fun s -> List.push_front (`InjectQemuGA s) ops),
+      s_"Inject the QEMU Guest Agent into a Windows guest"
+    ),
+    Some "METHOD", "Inject the QEMU Guest Agent into a Windows guest.  The guest\nagent communicates with qemu through a socket in order to\nprovide enhanced features (see L<qemu-ga(8)>).  This operation\nalso injects a firstboot script so that the Guest Agent is\ninstalled when the guest boots.\n\nThe parameter is the same as used by the I<--inject-virtio-win> operation.\n\nNote that to do a full conversion of a Windows guest from a\nforeign hypervisor like VMware (which involves many other operations)\nyou should use the L<virt-v2v(1)> tool instead of this.";
+    (
+      [ L"inject-virtio-win" ],
+      Getopt.String (s_"METHOD", fun s -> List.push_front (`InjectVirtioWin s) ops),
+      s_"Inject virtio-win drivers into a Windows guest"
+    ),
+    Some "METHOD", "Inject virtio-win drivers into a Windows guest.  These drivers\nadd virtio accelerated drivers suitable when running on top of\na hypervisor that supports virtio (such as qemu/KVM).  The\noperation also adjusts the Windows Registry so that the drivers\nare installed when the guest boots.\n\nThe parameter can be one of:\n\n=over 4\n\n=item ISO\n\nThe path to the ISO image containing the virtio-win drivers\n(eg. F</usr/share/virtio-win/virtio-win.iso>).\n\n=item DIR\n\nThe directory containing the unpacked virtio-win drivers\n(eg. F</usr/share/virtio-win>).\n\n=item B<\"osinfo\">\n\nThe literal string C<\"osinfo\"> means to use the\nlibosinfo database to locate the drivers.  (See\nL<osinfo-query(1)>.\n\n=back\n\nNote that to do a full conversion of a Windows guest from a\nforeign hypervisor like VMware (which involves many other operations)\nyou should use the L<virt-v2v(1)> tool instead of this.";
     (
       [ L"install" ],
       Getopt.String (
@@ -458,12 +478,18 @@ let rec argspec () =
       s_"Set password crypto"
     ),
     Some "md5|sha256|sha512", "When the virt tools change or set a password in the guest, this\noption sets the password encryption of that password to\nC<md5>, C<sha256> or C<sha512>.\n\nC<sha256> and C<sha512> require glibc E<ge> 2.7 (check crypt(3) inside\nthe guest).\n\nC<md5> will work with relatively old Linux guests (eg. RHEL 3), but\nis not secure against modern attacks.\n\nThe default is C<sha512> unless libguestfs detects an old guest that\ndidn't have support for SHA-512, in which case it will use C<md5>.\nYou can override libguestfs by specifying this option.\n\nNote this does not change the default password encryption used\nby the guest when you create new user accounts inside the guest.\nIf you want to do that, then you should use the I<--edit> option\nto modify C</etc/sysconfig/authconfig> (Fedora, RHEL) or\nC</etc/pam.d/common-password> (Debian, Ubuntu).";
+    (
+      [ L"no-selinux-relabel" ],
+      Getopt.Set no_selinux_relabel,
+      s_"Do not relabel files with correct SELinux labels"
+    ),
+    None, "Do not attempt to correct the SELinux labels of files in the guest.\n\nIn such guests that support SELinux, customization automatically\nrelabels files so that they have the correct SELinux label.  (The\nrelabeling is performed immediately, but if the operation fails,\ncustomization will instead touch F</.autorelabel> on the image to\nschedule a relabel operation for the next time the image boots.)  This\noption disables the automatic relabeling.\n\nThe option is a no-op for guests that do not support SELinux.";
     (
       [ L"selinux-relabel" ],
-      Getopt.Set selinux_relabel,
-      s_"Relabel files with correct SELinux labels"
+      Getopt.Set selinux_relabel_ignored,
+      s_"Compatibility option doing nothing"
     ),
-    None, "Relabel files in the guest so that they have the correct SELinux label.\n\nThis will attempt to relabel files immediately, but if the operation fails\nthis will instead touch F</.autorelabel> on the image to schedule a\nrelabel operation for the next time the image boots.\n\nYou should only use this option for guests which support SELinux.";
+    None, "This is a compatibility option that does nothing.";
     (
       [ L"sm-credentials" ],
       Getopt.String (
index 14eda49eb1fb81e1fc55a15266898756f95bd8a7..0cc166e673a2852cfb7935a47cce379305a5af66 100644 (file)
@@ -4,7 +4,7 @@
  *          and from the code in the generator/ subdirectory.
  * ANY CHANGES YOU MAKE TO THIS FILE WILL BE LOST.
  *
- * Copyright (C) 2009-2020 Red Hat Inc.
+ * Copyright (C) 2009-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -51,6 +51,10 @@ and op = [
       (* --firstboot-install PKG,PKG.. *)
   | `Hostname of string
       (* --hostname HOSTNAME *)
+  | `InjectQemuGA of string
+      (* --inject-qemu-ga METHOD *)
+  | `InjectVirtioWin of string
+      (* --inject-virtio-win METHOD *)
   | `InstallPackages of string list
       (* --install PKG,PKG.. *)
   | `Link of string * string list
@@ -101,7 +105,9 @@ and flags = {
       (* --no-logfile *)
   password_crypto : Password.password_crypto option;
       (* --password-crypto md5|sha256|sha512 *)
-  selinux_relabel : bool;
+  no_selinux_relabel : bool;
+      (* --no-selinux-relabel *)
+  selinux_relabel_ignored : bool;
       (* --selinux-relabel *)
   sm_credentials : Subscription_manager.sm_credentials option;
       (* --sm-credentials SELECTOR *)
index 8a022342f107a70bbdf0cf31795db890c4a63135..f05375e1d197ceb82f0396dfda07d6ab27bee39e 100644 (file)
@@ -52,7 +52,11 @@ let main () =
   let libvirturi = ref "" in
   let memsize = ref None in
   let set_memsize arg = memsize := Some arg in
+
+  (* Note that [--key ID:clevis] depends on this default. See more below, near
+   * [g#set_network network]. *)
   let network = ref true in
+
   let smp = ref None in
   let set_smp arg = smp := Some arg in
 
@@ -60,8 +64,8 @@ let main () =
     let uri =
       try URI.parse_uri arg
       with URI.Parse_failed ->
-        error (f_"error parsing URI '%s'. Look for error messages printed above.")
-          arg in
+        error (f_"error parsing URI '%s'. \
+                  Look for error messages printed above.") arg in
     let format = match !format with "auto" -> None | fmt -> Some fmt in
     List.push_front (uri, format) files;
     format_consumed := true
@@ -118,7 +122,8 @@ read the man page virt-customize(1).
   let add =
     match files, domain with
     | [], None ->
-      error (f_"you must give either -a or -d options. Read virt-customize(1) man page for further information.")
+      error (f_"you must give either -a or -d options. \
+                Read virt-customize(1) man page for further information.")
     | [], Some dom ->
       fun (g : Guestfs.guestfs) readonly ->
         let allowuuid = true in
@@ -129,7 +134,8 @@ read the man page virt-customize(1).
                   ?libvirturi ~allowuuid ~readonlydisk
                   dom)
     | _::_, Some _ ->
-      error (f_"you cannot give -a and -d options together. Read virt-customize(1) man page for further information.")
+      error (f_"you cannot give -a and -d options together. \
+                Read virt-customize(1) man page for further information.")
     | (_::_) as files, None ->
       fun g readonly ->
         List.iter (
@@ -159,6 +165,10 @@ read the man page virt-customize(1).
     let g = open_guestfs () in
     Option.may g#set_memsize memsize;
     Option.may g#set_smp smp;
+    (* [--no-network] from the command line takes precedence over the automatic
+     * network enablement for [--key ID:clevis], so here we intentionally
+     * don't check [key_store_requires_network opthandle.ks].
+     *)
     g#set_network network;
 
     (* Add disks. *)
index 7f60d24df1cfe220755134b6e0a7e761bd091f52..428ef538052be3e719b6eebff220ced5396cf272 100644 (file)
@@ -1,5 +1,5 @@
 (* virt-customize
- * Copyright (C) 2014-2020 Red Hat Inc.
+ * Copyright (C) 2014-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index b365413660485b23a69a8e6a2353550c95c3be11..f03774e003aec7ea18fba7c9b87bd3cff6235755 100644 (file)
@@ -50,7 +50,10 @@ let run (g : G.guestfs) root (ops : ops) =
   let do_run ~display ?(warn_failed_no_network = false) cmd =
     let incompatible_fn () =
       let guest_arch = g#inspect_get_arch root in
-      error (f_"host cpu (%s) and guest arch (%s) are not compatible, so you cannot use command line options that involve running commands in the guest.  Use --firstboot scripts instead.")
+      error (f_"host cpu (%s) and guest arch (%s) are not compatible, \
+                so you cannot use command line options that involve \
+                running commands in the guest.  Use --firstboot scripts \
+                instead.")
             Guestfs_config.host_cpu guest_arch
     in
 
@@ -61,105 +64,19 @@ let run (g : G.guestfs) root (ops : ops) =
         debug_logfile ();
         if warn_failed_no_network && not (g#get_network ()) then (
           prerr_newline ();
-          warning (f_"the command may have failed because the network is disabled.  Try either removing ‘--no-network’ or adding ‘--network’ on the command line.");
+          warning (f_"the command may have failed because the network is \
+                      disabled.  Try either removing ‘--no-network’ or \
+                      adding ‘--network’ on the command line.");
           prerr_newline ()
         );
         error (f_"%s: command exited with an error") display
   in
 
-  (* http://distrowatch.com/dwres.php?resource=package-management *)
-  let rec guest_install_command packages =
-    let quoted_args = String.concat " " (List.map quote packages) in
-    match g#inspect_get_package_management root with
-    | "apk" ->
-       sprintf "
-         apk update
-         apk add %s
-       " quoted_args
-    | "apt" ->
-      (* http://unix.stackexchange.com/questions/22820 *)
-      sprintf "
-        export DEBIAN_FRONTEND=noninteractive
-        apt_opts='-q -y -o Dpkg::Options::=--force-confnew'
-        apt-get $apt_opts update
-        apt-get $apt_opts install %s
-      " quoted_args
-    | "dnf" ->
-       sprintf "dnf%s -y install %s"
-               (if verbose () then " --verbose" else "")
-               quoted_args
-    | "pisi" ->   sprintf "pisi it %s" quoted_args
-    | "pacman" -> sprintf "pacman -S --noconfirm %s" quoted_args
-    | "urpmi" ->  sprintf "urpmi %s" quoted_args
-    | "xbps" ->   sprintf "xbps-install -Sy %s" quoted_args
-    | "yum" ->    sprintf "yum -y install %s" quoted_args
-    | "zypper" -> sprintf "zypper -n in -l %s" quoted_args
-
-    | "unknown" ->
-      error_unknown_package_manager (s_"--install")
-    | pm ->
-      error_unimplemented_package_manager (s_"--install") pm
-
-  and guest_update_command () =
-    match g#inspect_get_package_management root with
-    | "apk" ->
-       "
-         apk update
-         apk upgrade
-       "
-    | "apt" ->
-      (* http://unix.stackexchange.com/questions/22820 *)
-      "
-        export DEBIAN_FRONTEND=noninteractive
-        apt_opts='-q -y -o Dpkg::Options::=--force-confnew'
-        apt-get $apt_opts update
-        apt-get $apt_opts upgrade
-      "
-    | "dnf" ->
-       sprintf "dnf%s -y --best upgrade"
-               (if verbose () then " --verbose" else "")
-    | "pisi" ->   "pisi upgrade"
-    | "pacman" -> "pacman -Su"
-    | "urpmi" ->  "urpmi --auto-select"
-    | "xbps" ->   "xbps-install -Suy"
-    | "yum" ->    "yum -y update"
-    | "zypper" -> "zypper -n update -l"
-
-    | "unknown" ->
-      error_unknown_package_manager (s_"--update")
-    | pm ->
-      error_unimplemented_package_manager (s_"--update") pm
-
-  and guest_uninstall_command packages =
-    let quoted_args = String.concat " " (List.map quote packages) in
-    match g#inspect_get_package_management root with
-    | "apk" -> sprintf "apk del %s" quoted_args
-    | "apt" ->
-      (* http://unix.stackexchange.com/questions/22820 *)
-      sprintf "
-        export DEBIAN_FRONTEND=noninteractive
-        apt_opts='-q -y -o Dpkg::Options::=--force-confnew'
-        apt-get $apt_opts remove %s
-      " quoted_args
-    | "dnf" ->    sprintf "dnf -y remove %s" quoted_args
-    | "pisi" ->   sprintf "pisi rm %s" quoted_args
-    | "pacman" -> sprintf "pacman -R %s" quoted_args
-    | "urpmi" ->  sprintf "urpme %s" quoted_args
-    | "xbps" ->   sprintf "xbps-remove -Sy %s" quoted_args
-    | "yum" ->    sprintf "yum -y remove %s" quoted_args
-    | "zypper" -> sprintf "zypper -n rm %s" quoted_args
-
-    | "unknown" ->
-      error_unknown_package_manager (s_"--uninstall")
-    | pm ->
-      error_unimplemented_package_manager (s_"--uninstall") pm
-
-  (* Windows has package_management == "unknown". *)
-  and error_unknown_package_manager flag =
-    error (f_"cannot use ‘%s’ because no package manager has been detected for this guest OS.\n\nIf this guest OS is a common one with ordinary package management then this may have been caused by a failure of libguestfs inspection.\n\nFor OSes such as Windows that lack package management, this is not possible.  Try using one of the ‘--firstboot*’ flags instead (described in the manual).") flag
-
-  and error_unimplemented_package_manager flag pm =
-      error (f_"sorry, ‘%s’ with the ‘%s’ package manager has not been implemented yet.\n\nYou can work around this by using one of the ‘--run*’ or ‘--firstboot*’ options instead (described in the manual).") flag pm
+  let guest_pkgs_command f =
+    try f (g#inspect_get_package_management root) with
+    | Guest_packages.Unknown_package_manager msg
+    | Guest_packages.Unimplemented_package_manager msg ->
+      error "%s" msg
   in
 
   (* Set the random seed. *)
@@ -191,10 +108,28 @@ let run (g : G.guestfs) root (ops : ops) =
   let passwords = Hashtbl.create 13 in
   let set_password user pw =
     if Hashtbl.mem passwords user then
-      error (f_"multiple --root-password/--password options set the password for user ‘%s’ twice") user;
+      error (f_"multiple --root-password/--password options set the \
+                password for user ‘%s’ twice") user;
     Hashtbl.replace passwords user pw
   in
 
+  (* Helper function to convert --inject-qemu-ga/--inject-virtio-win
+   * method parameter into a virtio-win handle.
+   *)
+  let get_virtio_win_handle op meth =
+    if g#inspect_get_type root <> "windows" then (
+        warning (f_"%s ignored for non-Windows guest") op;
+        None
+    )
+    else (
+      match meth with
+      | "osinfo" | "libosinfo" ->
+         Some (Inject_virtio_win.from_libosinfo g root)
+      | path ->
+         Some (Inject_virtio_win.from_path g root path)
+    )
+  in
+
   (* Perform the remaining customizations in command-line order. *)
   List.iter (
     function
@@ -203,7 +138,9 @@ let run (g : G.guestfs) root (ops : ops) =
         * to prevent incorrect line endings being added to a file.
         *)
        if String.contains line '\n' then
-         error (f_"--append-line: line must not contain newline characters.  Use the --append-line option multiple times to add several lines.");
+         error (f_"--append-line: line must not contain newline characters.  \
+                   Use the --append-line option multiple times to add \
+                   several lines.");
 
        message (f_"Appending line to %s") path;
        append_line g root path line
@@ -255,7 +192,7 @@ let run (g : G.guestfs) root (ops : ops) =
     | `FirstbootPackages pkgs ->
       message (f_"Installing firstboot packages: %s")
         (String.concat " " pkgs);
-      let cmd = guest_install_command pkgs in
+      let cmd = guest_pkgs_command (Guest_packages.install_command pkgs) in
       let name = String.concat " " ("install" :: pkgs) in
       Firstboot.add_firstboot_script g root name cmd
 
@@ -269,9 +206,36 @@ let run (g : G.guestfs) root (ops : ops) =
       if not (Hostname.set_hostname g root hostname) then
         warning (f_"hostname could not be set for this type of guest")
 
+    | `InjectQemuGA meth ->
+       (match get_virtio_win_handle "--inject-qemu-ga" meth with
+        | None -> ()
+        | Some t ->
+           if not (Inject_virtio_win.inject_qemu_ga t) then
+             warning (f_"--inject-qemu-ga: QEMU Guest Agent MSI not found in \
+                         virtio-win source that you specified")
+       )
+
+    | `InjectVirtioWin meth ->
+       (match get_virtio_win_handle "--inject-virtio-win" meth with
+        | None -> ()
+        | Some t ->
+           let windows_system_hive = g#inspect_get_windows_system_hive root in
+           Registry.with_hive_write g windows_system_hive (
+             fun reg ->
+               let installed =
+                 Inject_virtio_win.inject_virtio_win_drivers t reg in
+
+               (* Warn if we didn't install at least the virtio-blk driver. *)
+               if installed.block_driver <> Inject_virtio_win.Virtio_blk then
+                 warning (f_"--inject-virtio-win: virtio drivers were not \
+                             found for this Windows version in the \
+                             virtio-win source that you specified")
+             )
+       )
+
     | `InstallPackages pkgs ->
       message (f_"Installing packages: %s") (String.concat " " pkgs);
-      let cmd = guest_install_command pkgs in
+      let cmd = guest_pkgs_command (Guest_packages.install_command pkgs) in
       do_run ~display:cmd ~warn_failed_no_network:true cmd
 
     | `Link (target, links) ->
@@ -321,9 +285,11 @@ let run (g : G.guestfs) root (ops : ops) =
       let creds =
         match ops.flags.sm_credentials with
         | None ->
-          error (f_"subscription-manager credentials required for --sm-register")
+          error (f_"subscription-manager credentials required for \
+                    --sm-register")
         | Some c -> c in
-      let cmd = sprintf "subscription-manager register --username=%s --password=%s"
+      let cmd = sprintf "subscription-manager register \
+                         --username=%s --password=%s"
                   (quote creds.Subscription_manager.sm_username)
                   (quote creds.Subscription_manager.sm_password) in
       do_run ~display:"subscription-manager register"
@@ -365,12 +331,12 @@ let run (g : G.guestfs) root (ops : ops) =
 
     | `UninstallPackages pkgs ->
       message (f_"Uninstalling packages: %s") (String.concat " " pkgs);
-      let cmd = guest_uninstall_command pkgs in
+      let cmd = guest_pkgs_command (Guest_packages.uninstall_command pkgs) in
       do_run ~display:cmd cmd
 
     | `Update ->
       message (f_"Updating packages");
-      let cmd = guest_update_command () in
+      let cmd = guest_pkgs_command Guest_packages.update_command in
       do_run ~display:cmd ~warn_failed_no_network:true cmd
 
     | `Upload (path, dest) ->
@@ -415,7 +381,7 @@ let run (g : G.guestfs) root (ops : ops) =
       warning (f_"passwords could not be set for this type of guest")
   );
 
-  if ops.flags.selinux_relabel then (
+  if not ops.flags.no_selinux_relabel then (
     message (f_"SELinux relabelling");
     SELinux_relabel.relabel g
   );
index df64a2dab45da2406cdc22808e375a465b56bf90..50a287dcd68f2f5f9c6ae06329286e8d92f8895d 100644 (file)
@@ -1,5 +1,5 @@
 (* virt-sysprep
- * Copyright (C) 2012-2020 Red Hat Inc.
+ * Copyright (C) 2012-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -36,7 +36,8 @@ let rec set_hostname (g : Guestfs.guestfs) root hostname =
     update_etc_machine_info g hostname;
     true
 
-  | "linux", ("rhel"|"centos"|"scientificlinux"|"oraclelinux"|"redhat-based"), v
+  | "linux", ("rhel"|"centos"|"scientificlinux"|"oraclelinux"|"rocky"|
+              "redhat-based"), v
     when v >= 7 ->
     update_etc_hostname g hostname;
     update_etc_machine_info g hostname;
@@ -48,7 +49,8 @@ let rec set_hostname (g : Guestfs.guestfs) root hostname =
     replace_host_in_etc_hosts g old_hostname hostname;
     true
 
-  | "linux", ("fedora"|"rhel"|"centos"|"scientificlinux"|"oraclelinux"|"redhat-based"), _ ->
+  | "linux", ("fedora"|"rhel"|"centos"|"scientificlinux"|"oraclelinux"|
+              "redhat-based"), _ ->
     replace_line_in_file g "/etc/sysconfig/network" "HOSTNAME" hostname;
     true
 
index a22b86d0080e378885dd96b69e1be41c9fb61a9e..393f2318d707169db65a5e542e5cdf7a99eb6c3f 100644 (file)
@@ -1,5 +1,5 @@
 (* virt-sysprep
- * Copyright (C) 2012-2020 Red Hat Inc.
+ * Copyright (C) 2012-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index 608bf95dcf8ecade7869a1503dd94b9296ba81b8..c0077fce45b3dd4feab929d6a059430cfc005a71 100644 (file)
@@ -1,5 +1,5 @@
 (* virt-sysprep
- * Copyright (C) 2012-2021 Red Hat Inc.
+ * Copyright (C) 2012-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -48,7 +48,8 @@ let password_crypto_of_string = function
   | "sha512" -> `SHA512
   | "yescrypt" -> `YESCRYPT
   | arg ->
-    error (f_"password-crypto: unknown algorithm %s, use \"md5\", \"sha256\", \"sha512\" or \"yescrypt\"") arg
+    error (f_"password-crypto: unknown algorithm %s, \
+              use \"md5\", \"sha256\", \"sha512\" or \"yescrypt\"") arg
 
 let rec parse_selector arg =
   parse_selector_list arg (String.nsplit ":" arg)
@@ -74,7 +75,8 @@ and parse_selector_list orig_arg = function
 (* Permissible characters in a salt. *)
 let chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789./"
 
-let rec set_linux_passwords ?password_crypto (g : Guestfs.guestfs) root passwords =
+let rec set_linux_passwords ?password_crypto (g : Guestfs.guestfs)
+          root passwords =
   let crypto =
     match password_crypto with
     | None -> default_crypto g root
@@ -160,9 +162,11 @@ and default_crypto g root =
   let distro = g#inspect_get_distro root in
   let major = g#inspect_get_major_version root in
   match distro, major with
-  | ("rhel"|"centos"|"scientificlinux"|"oraclelinux"|"redhat-based"), v when v >= 9 ->
+  | ("rhel"|"centos"|"scientificlinux"|"oraclelinux"|"rocky"|
+     "redhat-based"), v when v >= 9 ->
     `YESCRYPT
-  | ("rhel"|"centos"|"scientificlinux"|"oraclelinux"|"redhat-based"), v when v >= 6 ->
+  | ("rhel"|"centos"|"scientificlinux"|"oraclelinux"|"redhat-based"), v
+       when v >= 6 ->
     `SHA512
   | ("rhel"|"centos"|"scientificlinux"|"oraclelinux"|"redhat-based"), _ ->
     `MD5 (* RHEL 5 does not appear to support SHA512, according to crypt(3) *)
@@ -189,7 +193,9 @@ and default_crypto g root =
 
   | _, _ ->
     let minor = g#inspect_get_minor_version root in
-    warning (f_"password: using insecure md5 password encryption for guest of type %s version %d.%d.
-If this is incorrect, use --password-crypto option and file a bug.")
+    warning (f_"password: using insecure md5 password encryption for \
+                guest of type %s version %d.%d.\n\
+                If this is incorrect, use --password-crypto option \
+                and file a bug.")
       distro major minor;
     `MD5
index 4130901fd0e0cc5bd5882cc7ae4fbb2808ceab1c..49a222161b5cd3acf468f0c9cdcbc9d3b281ddf1 100644 (file)
@@ -1,5 +1,5 @@
 (* virt-sysprep
- * Copyright (C) 2012-2021 Red Hat Inc.
+ * Copyright (C) 2012-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index 415cae9f93f0d91ff9642aea3929c15e2eacf2cf..38f88d55cd0f40c9db2b6cb8c7926a5a4e998e6f 100644 (file)
@@ -19,7 +19,8 @@
 open Std_utils
 open Tools_utils
 
-external c_edit_file : verbose:bool -> Guestfs.t -> int64 -> string -> string -> unit
+external c_edit_file : verbose:bool -> Guestfs.t -> int64 -> string -> string
+                       -> unit
   = "virt_customize_edit_file_perl"
 let edit_file g file expr =
   (* Note we pass original 'g' even though it is not used by the
index f32d3194ea610bd414f03a840ff09931f9dbd5ad..f3c1ab6096788514b08b67a7eff8a2815ed6f0cc 100644 (file)
@@ -1,5 +1,5 @@
 (* virt-sysprep
- * Copyright (C) 2012-2020 Red Hat Inc.
+ * Copyright (C) 2012-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -47,7 +47,8 @@ let rec set_random_seed (g : Guestfs.guestfs) root =
     let distro = g#inspect_get_distro root in
     let file =
       match typ, distro with
-      | "linux", ("fedora"|"rhel"|"centos"|"scientificlinux"|"oraclelinux"|"redhat-based") ->
+      | "linux", ("fedora"|"rhel"|"centos"|"scientificlinux"|"oraclelinux"|
+                  "rocky"|"redhat-based") ->
         Some "/var/lib/random-seed"
       | "linux", ("debian"|"ubuntu"|"kalilinux") ->
         Some "/var/lib/urandom/random-seed"
index fc552b662e8fb94828a01f085845ed16beba2ef5..650a170976ab82cd3d45820e5392033c90d251e8 100644 (file)
@@ -1,5 +1,5 @@
 (* virt-sysprep
- * Copyright (C) 2012-2020 Red Hat Inc.
+ * Copyright (C) 2012-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index ed4c90f2eb378a1b1f0189409ae5bd3308fc5fa0..e8b492dd15bea3756ddf68a7d442a9c6ed5d4c95 100755 (executable)
@@ -61,9 +61,6 @@ case "$guestname" in
         extra[${#extra[*]}]='/etc/inittab:
                                 s,^#([1-9].*respawn.*/sbin/getty.*),$1,'
         ;;
-    fedora*|rhel*|centos*)
-        extra[${#extra[*]}]='--selinux-relabel'
-        ;;
     *)
         ;;
 esac
index 2ac7a10561e420691646eebf65e543335b65e3b1..1de566e1dedc30a73ccd616c8157779198bdbafa 100644 (file)
@@ -17,6 +17,7 @@
  *)
 
 open Tools_utils
+open Common_gettext.Gettext
 
 open Printf
 
@@ -31,7 +32,8 @@ let set_timezone (g : Guestfs.guestfs) root timezone =
   | "linux" ->
     let target = sprintf "/usr/share/zoneinfo/%s" timezone in
     if not (g#exists target) then
-      error "timezone '%s' does not exist, use a location like 'Europe/London'" timezone;
+      error (f_"timezone '%s' does not exist, use a location like \
+                'Europe/London'") timezone;
     g#ln_sf target "/etc/localtime";
     true
 
index 6a91f69c30f4f22e5a5fd3aacf0555151b61417d..1b386e35a65504d19a576d12d6a2f8ae2dc42e58 100644 (file)
@@ -311,4 +311,4 @@ Richard W.M. Jones L<http://people.redhat.com/~rjones/>
 
 =head1 COPYRIGHT
 
-Copyright (C) 2011-2020 Red Hat Inc.
+Copyright (C) 2011-2023 Red Hat Inc.
index f312c7f2c0b6bf028ebf509f1b8c397dde6843a8..9eb4a31d6611aae450a7e6eae5f1150738a20890 100644 (file)
@@ -1,5 +1,5 @@
 # libguestfs virt-df
-# Copyright (C) 2010-2012 Red Hat Inc.
+# Copyright (C) 2010-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index e0e18d98a9250883f8640bd7528a6115fdcab7cb..f2c7a1dc8549525df15ae4e7644837009f0fea8a 100644 (file)
@@ -15,7 +15,7 @@
 @SET_MAKE@
 
 # libguestfs virt-df
-# Copyright (C) 2010-2012 Red Hat Inc.
+# Copyright (C) 2010-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -32,7 +32,7 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -494,7 +494,6 @@ EGREP = @EGREP@
 ETAGS = @ETAGS@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FILECMD = @FILECMD@
 GCC_VISIBILITY_HIDDEN = @GCC_VISIBILITY_HIDDEN@
 GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
 GMSGFMT = @GMSGFMT@
@@ -523,6 +522,8 @@ LIBINTL = @LIBINTL@
 LIBLZMA_CFLAGS = @LIBLZMA_CFLAGS@
 LIBLZMA_LIBS = @LIBLZMA_LIBS@
 LIBOBJS = @LIBOBJS@
+LIBOSINFO_CFLAGS = @LIBOSINFO_CFLAGS@
+LIBOSINFO_LIBS = @LIBOSINFO_LIBS@
 LIBS = @LIBS@
 LIBTINFO_CFLAGS = @LIBTINFO_CFLAGS@
 LIBTINFO_LIBS = @LIBTINFO_LIBS@
@@ -593,6 +594,7 @@ PO4A_TRANSLATE = @PO4A_TRANSLATE@
 PODWRAPPER = @PODWRAPPER@
 POSUB = @POSUB@
 RANLIB = @RANLIB@
+REALPATH = @REALPATH@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
diff --git a/df/df.c b/df/df.c
index 66b1d8334fab551504348169ca35938156e5e4d6..bdbf739c5e934363d85d13995acd7d6e5e6cd76b 100644 (file)
--- a/df/df.c
+++ b/df/df.c
@@ -1,5 +1,5 @@
 /* virt-df
- * Copyright (C) 2010-2012 Red Hat Inc.
+ * Copyright (C) 2010-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index 479d27fa25b45079e0c301aebae2f30dba04b934..4f1ea3f8dfa2648160fb9197daccd353a2a32d09 100644 (file)
--- a/df/main.c
+++ b/df/main.c
@@ -1,5 +1,5 @@
 /* virt-df
- * Copyright (C) 2010-2012 Red Hat Inc.
+ * Copyright (C) 2010-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index 7c999ec57f044aa461f4668c637c2f7be09e1506..eed9d13a033bbb3c666978b7406fb54b1d3c2777 100644 (file)
@@ -1,5 +1,5 @@
 /* virt-df
- * Copyright (C) 2010-2012 Red Hat Inc.
+ * Copyright (C) 2010-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index 166a13c58add436b468c2880ece9ec75950aa2c9..fb5f5de0fc3e235d8baabc81d403482e814e66b3 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/bash -
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index 0b414c1d8decb36883492306b3f61e45e4909431..d531002052e5b37c2519c0a9b22dca0310687e56 100644 (file)
@@ -1,5 +1,5 @@
 /* virt-df
- * Copyright (C) 2010-2020 Red Hat Inc.
+ * Copyright (C) 2010-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index 8135e44c46d63b31aee360f999138bcd6fc1d618..8bd5a091308905ac4ce4f8e348911cfe2f4710c7 100644 (file)
@@ -260,6 +260,7 @@ error.
 L<df(1)>,
 L<guestfs(3)>,
 L<guestfish(1)>,
+L<virt-drivers(1)>,
 L<virt-filesystems(1)>,
 L<http://libguestfs.org/>.
 
@@ -269,4 +270,4 @@ Richard W.M. Jones L<http://people.redhat.com/~rjones/>
 
 =head1 COPYRIGHT
 
-Copyright (C) 2009-2020 Red Hat Inc.
+Copyright (C) 2009-2023 Red Hat Inc.
index 786d3b3ad7ded1fbc5866fd32e464af99f93f6fb..7985a71f93d68d2d27ebb93bbb017a691356af8f 100644 (file)
@@ -32,7 +32,7 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -489,7 +489,6 @@ EGREP = @EGREP@
 ETAGS = @ETAGS@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FILECMD = @FILECMD@
 GCC_VISIBILITY_HIDDEN = @GCC_VISIBILITY_HIDDEN@
 GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
 GMSGFMT = @GMSGFMT@
@@ -518,6 +517,8 @@ LIBINTL = @LIBINTL@
 LIBLZMA_CFLAGS = @LIBLZMA_CFLAGS@
 LIBLZMA_LIBS = @LIBLZMA_LIBS@
 LIBOBJS = @LIBOBJS@
+LIBOSINFO_CFLAGS = @LIBOSINFO_CFLAGS@
+LIBOSINFO_LIBS = @LIBOSINFO_LIBS@
 LIBS = @LIBS@
 LIBTINFO_CFLAGS = @LIBTINFO_CFLAGS@
 LIBTINFO_LIBS = @LIBTINFO_LIBS@
@@ -588,6 +589,7 @@ PO4A_TRANSLATE = @PO4A_TRANSLATE@
 PODWRAPPER = @PODWRAPPER@
 POSUB = @POSUB@
 RANLIB = @RANLIB@
+REALPATH = @REALPATH@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
index f5ce604c832d3afb4470488c6299bfd255cda8a2..a4ba360400bc070b931f0ace6c43861839712e5a 100644 (file)
@@ -550,7 +550,7 @@ let main () =
   let image_basename_d = image_basename ^ ".d" in
 
   let tmpdir = Mkdtemp.temp_dir "dib." in
-  On_exit.rmdir tmpdir;
+  On_exit.rm_rf tmpdir;
   let auxtmpdir = tmpdir // "in_target.aux" in
   do_mkdir auxtmpdir;
   let hookstmpdir = auxtmpdir // "hooks" in
index 0e3d67e9728ef89e8e560def13a2fa8d4722cf3d..247f33540d8e2591fac0e95594b9bb6c5d4cd36a 100644 (file)
@@ -1,5 +1,5 @@
 (* virt-dib
- * Copyright (C) 2012-2020 Red Hat Inc.
+ * Copyright (C) 2012-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index b7e526b5e9c515c6eb5cd60bc210eb4cfb323b65..d545891b1ea36abeae8b725fad94a0374bc3f27e 100644 (file)
@@ -1,5 +1,5 @@
 (* virt-dib
- * Copyright (C) 2012-2020 Red Hat Inc.
+ * Copyright (C) 2012-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index 92787a2ef706d5dd9e3da344f5e835a1f8a650d3..7f254ba965cc7f8b6d53123038046606e23071c0 100644 (file)
@@ -1,5 +1,5 @@
 (* virt-dib
- * Copyright (C) 2016-2020 Red Hat Inc.
+ * Copyright (C) 2016-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index 5b669feafbf39194b14199161e612d9e88bc15d5..d12605620b6101005a51f8dce0e35e671310fda4 100644 (file)
@@ -1,5 +1,5 @@
 (* virt-dib
- * Copyright (C) 2015-2020 Red Hat Inc.
+ * Copyright (C) 2015-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index 047731b866a4f4438842f22e9bd4cd337ec3fe80..a366798948e09d45ba9418eb9b9d4081a2cd21f3 100644 (file)
@@ -1,5 +1,5 @@
 (* virt-dib
- * Copyright (C) 2015-2020 Red Hat Inc.
+ * Copyright (C) 2015-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index c1a7672ee3df5dbfb685ea70a008e31c1e0ced1a..6f749f870ae0687cb83f4163de3ce2dd420c605f 100644 (file)
@@ -1,5 +1,5 @@
 (* virt-dib
- * Copyright (C) 2015-2020 Red Hat Inc.
+ * Copyright (C) 2015-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index afca19629ccb9c479bcb39aa441ba096e3c9c516..1d56947a63d736ad39a60d06b93b0c084d33f3d2 100644 (file)
@@ -1,5 +1,5 @@
 (* virt-dib
- * Copyright (C) 2015-2020 Red Hat Inc.
+ * Copyright (C) 2015-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index f595947e9db17dc9e576a1f1bb077e4e96963879..7397baf8712c8795c8bea09121b776f803ecc755 100644 (file)
@@ -32,7 +32,7 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -488,7 +488,6 @@ EGREP = @EGREP@
 ETAGS = @ETAGS@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FILECMD = @FILECMD@
 GCC_VISIBILITY_HIDDEN = @GCC_VISIBILITY_HIDDEN@
 GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
 GMSGFMT = @GMSGFMT@
@@ -517,6 +516,8 @@ LIBINTL = @LIBINTL@
 LIBLZMA_CFLAGS = @LIBLZMA_CFLAGS@
 LIBLZMA_LIBS = @LIBLZMA_LIBS@
 LIBOBJS = @LIBOBJS@
+LIBOSINFO_CFLAGS = @LIBOSINFO_CFLAGS@
+LIBOSINFO_LIBS = @LIBOSINFO_LIBS@
 LIBS = @LIBS@
 LIBTINFO_CFLAGS = @LIBTINFO_CFLAGS@
 LIBTINFO_LIBS = @LIBTINFO_LIBS@
@@ -587,6 +588,7 @@ PO4A_TRANSLATE = @PO4A_TRANSLATE@
 PODWRAPPER = @PODWRAPPER@
 POSUB = @POSUB@
 RANLIB = @RANLIB@
+REALPATH = @REALPATH@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
index 6aae88e6a6f77b7dbf3ef85f2ce55e522473560a..fb66a2bbd3ae230e0e2e3272d7e2a1b17f2b66d2 100644 (file)
@@ -106,7 +106,7 @@ usage (int status)
              getprogname ());
   else {
     printf (_("%s: list differences between virtual machines\n"
-              "Copyright (C) 2010-2020 Red Hat Inc.\n"
+              "Copyright (C) 2010-2023 Red Hat Inc.\n"
               "Usage:\n"
               "  %s [--options] -d domain1 -D domain2\n"
               "  %s [--options] -a disk1.img -A disk2.img [-a|-A ...]\n"
@@ -209,6 +209,7 @@ main (int argc, char *argv[])
   int option_index;
   struct tree *tree1, *tree2;
   struct key_store *ks = NULL;
+  bool network;
 
   g = guestfs_create ();
   if (g == NULL)
@@ -378,6 +379,10 @@ main (int argc, char *argv[])
   /* Mount up first guest. */
   add_drives (drvs);
 
+  network = key_store_requires_network (ks);
+  if (guestfs_set_network (g, network) == -1)
+    exit (EXIT_FAILURE);
+
   if (guestfs_launch (g) == -1)
     exit (EXIT_FAILURE);
 
@@ -389,6 +394,9 @@ main (int argc, char *argv[])
   /* Mount up second guest. */
   add_drives_handle (g2, drvs2, 0);
 
+  if (guestfs_set_network (g2, network) == -1)
+    exit (EXIT_FAILURE);
+
   if (guestfs_launch (g2) == -1)
     exit (EXIT_FAILURE);
 
index bcec24c651113da66e13b1a0fb5a65763971ad39..6bbcfb2d326b433e373601936493f49dad72fd08 100644 (file)
@@ -262,4 +262,4 @@ Richard W.M. Jones L<http://people.redhat.com/~rjones/>
 
 =head1 COPYRIGHT
 
-Copyright (C) 2009-2020 Red Hat Inc.
+Copyright (C) 2009-2023 Red Hat Inc.
index 5f489d18994f671aac3cce90734a997b46ac9204..8148f0e98ea2fa6ddc52395e9c81bc50214e9698 100644 (file)
@@ -1,5 +1,5 @@
 # guestfs-tools documentation
-# Copyright (C) 2010-2022 Red Hat Inc.
+# Copyright (C) 2010-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 include $(top_srcdir)/subdir-rules.mk
 
 EXTRA_DIST = \
-       guestfs-tools-release-notes-1.48.pod
+       guestfs-tools-release-notes-1.48.pod \
+       guestfs-tools-release-notes-1.50.pod
 
 man_MANS = \
-       guestfs-tools-release-notes-1.48.1
+       guestfs-tools-release-notes-1.48.1 \
+       guestfs-tools-release-notes-1.50.1
 noinst_DATA = \
-       $(top_builddir)/website/guestfs-tools-release-notes-1.48.1.html
+       $(top_builddir)/website/guestfs-tools-release-notes-1.48.1.html \
+       $(top_builddir)/website/guestfs-tools-release-notes-1.50.1.html
 
 guestfs-tools-release-notes-1.48.1 guestfs-tools-release-notes-1.48.txt $(top_builddir)/website/guestfs-tools-release-notes-1.48.1.html: stamp-guestfs-tools-release-notes-1.48.pod
 
@@ -35,3 +38,14 @@ stamp-guestfs-tools-release-notes-1.48.pod: guestfs-tools-release-notes-1.48.pod
          --license GPLv2+ \
          $<
        touch $@
+
+guestfs-tools-release-notes-1.50.1 guestfs-tools-release-notes-1.50.txt $(top_builddir)/website/guestfs-tools-release-notes-1.50.1.html: stamp-guestfs-tools-release-notes-1.50.pod
+
+stamp-guestfs-tools-release-notes-1.50.pod: guestfs-tools-release-notes-1.50.pod
+       $(PODWRAPPER) \
+         --section 1 \
+         --man guestfs-tools-release-notes-1.50.1 \
+         --html $(top_builddir)/website/guestfs-tools-release-notes-1.50.1.html \
+         --license GPLv2+ \
+         $<
+       touch $@
index 0e218a29afa81f7a7b583cddefdad0d5ea5a67b9..d76d55970d4f1c87fb7d325e8654cab2ea15050f 100644 (file)
@@ -15,7 +15,7 @@
 @SET_MAKE@
 
 # guestfs-tools documentation
-# Copyright (C) 2010-2022 Red Hat Inc.
+# Copyright (C) 2010-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -32,7 +32,7 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -251,7 +251,6 @@ EGREP = @EGREP@
 ETAGS = @ETAGS@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FILECMD = @FILECMD@
 GCC_VISIBILITY_HIDDEN = @GCC_VISIBILITY_HIDDEN@
 GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
 GMSGFMT = @GMSGFMT@
@@ -280,6 +279,8 @@ LIBINTL = @LIBINTL@
 LIBLZMA_CFLAGS = @LIBLZMA_CFLAGS@
 LIBLZMA_LIBS = @LIBLZMA_LIBS@
 LIBOBJS = @LIBOBJS@
+LIBOSINFO_CFLAGS = @LIBOSINFO_CFLAGS@
+LIBOSINFO_LIBS = @LIBOSINFO_LIBS@
 LIBS = @LIBS@
 LIBTINFO_CFLAGS = @LIBTINFO_CFLAGS@
 LIBTINFO_LIBS = @LIBTINFO_LIBS@
@@ -350,6 +351,7 @@ PO4A_TRANSLATE = @PO4A_TRANSLATE@
 PODWRAPPER = @PODWRAPPER@
 POSUB = @POSUB@
 RANLIB = @RANLIB@
+REALPATH = @REALPATH@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
@@ -491,13 +493,16 @@ guestfs_am_v_po4a_translate = $(guestfs_am_v_po4a_translate_@AM_V@)
 guestfs_am_v_po4a_translate_ = $(guestfs_am_v_po4a_translate_@AM_DEFAULT_V@)
 guestfs_am_v_po4a_translate_0 = @echo "  PO4A-T  " $@;
 EXTRA_DIST = \
-       guestfs-tools-release-notes-1.48.pod
+       guestfs-tools-release-notes-1.48.pod \
+       guestfs-tools-release-notes-1.50.pod
 
 man_MANS = \
-       guestfs-tools-release-notes-1.48.1
+       guestfs-tools-release-notes-1.48.1 \
+       guestfs-tools-release-notes-1.50.1
 
 noinst_DATA = \
-       $(top_builddir)/website/guestfs-tools-release-notes-1.48.1.html
+       $(top_builddir)/website/guestfs-tools-release-notes-1.48.1.html \
+       $(top_builddir)/website/guestfs-tools-release-notes-1.50.1.html
 
 all: all-am
 
@@ -808,6 +813,17 @@ stamp-guestfs-tools-release-notes-1.48.pod: guestfs-tools-release-notes-1.48.pod
          $<
        touch $@
 
+guestfs-tools-release-notes-1.50.1 guestfs-tools-release-notes-1.50.txt $(top_builddir)/website/guestfs-tools-release-notes-1.50.1.html: stamp-guestfs-tools-release-notes-1.50.pod
+
+stamp-guestfs-tools-release-notes-1.50.pod: guestfs-tools-release-notes-1.50.pod
+       $(PODWRAPPER) \
+         --section 1 \
+         --man guestfs-tools-release-notes-1.50.1 \
+         --html $(top_builddir)/website/guestfs-tools-release-notes-1.50.1.html \
+         --license GPLv2+ \
+         $<
+       touch $@
+
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
 .NOEXPORT:
index 44f7e4f0bbd93d7afe00182ace0b8cc4d916e727..ab2e173cb82b8e94a801767eb05fab6bbb7c6225 100644 (file)
@@ -127,4 +127,4 @@ git shortlog -s v1.46.0..
 
 =head1 COPYRIGHT
 
-Copyright (C) 2009-2022 Red Hat Inc.
+Copyright (C) 2009-2023 Red Hat Inc.
diff --git a/docs/guestfs-tools-release-notes-1.50.pod b/docs/guestfs-tools-release-notes-1.50.pod
new file mode 100644 (file)
index 0000000..26b9dbd
--- /dev/null
@@ -0,0 +1,182 @@
+=head1 NAME
+
+guestfs-tools-release-notes - guestfs tools release Notes
+
+=head1 RELEASE NOTES FOR GUESTFS TOOLS 1.50
+
+These are the release notes for guestfs tools stable release 1.50.
+This describes the major changes since 1.48.
+
+Guestfs tools 1.50.0 was released on B<7 February 2023>.
+
+=head2 Security
+
+=over 4
+
+=item CVE-2022-2211
+
+L<https://bugzilla.redhat.com/show_bug.cgi?id=2100862>
+
+A buffer overflow was found in the I<--key> option of several guestfs
+tools.  For more information on this low severity bug see the bug
+report above (Laszlo Ersek).
+
+=back
+
+=head2 New virt-drivers tool
+
+This new tool can examine a disk image to determine:
+
+=over 4
+
+=item *
+
+Whether it uses BIOS or UEFI for booting
+
+=item *
+
+What bootloader it uses (Linux only)
+
+=item *
+
+What kernels may be chosen at boot time (Linux only)
+
+=item *
+
+What device drivers (kernel modules) are installed
+
+=back
+
+This is useful for determining how (or if) a guest can boot on a
+virtualization hypervisor.
+
+=head2 virt-customize
+
+I<--selinux-relabel> is now the default for SELinux guests.  You no
+longer need to specify this flag.  In the rare case where you don't
+want to relabel a guest after customizing it, you can use
+I<--no-selinux-relabel>.  Note this is not needed for non-SELinux
+guests, it will do the right thing automatically (Laszlo Ersek).
+
+New I<--inject-qemu-ga> and I<--inject-virtio-win> operations which
+respectively inject QEMU Guest Agent and virtio-win drivers into
+Windows guests.
+
+Rocky Linux guests are now supported (thanks Harry Benson).
+
+=head2 virt-inspector
+
+Virt-inspector now outputs the new E<lt>build_idE<gt> element
+containing the guest build ID, if using libguestfs E<ge> 1.50.
+
+=head2 virt-sysprep
+
+New C<lvm-system-devices> operation for removing LVM2's
+F<system.devices> file.  This avoids certain problems when cloning a
+VM (Laszlo Ersek).
+
+Virt-sysprep supports guests using LUKS logical volumes on top of LVM
+(Laszlo Ersek).
+
+=head2 Common changes
+
+All the tools supporting the I<--key> option can now use Clevis/Tang
+to decrypt full disk encryption using this network-based scheme
+(Laszlo Ersek).
+
+=head2 Build changes
+
+B<Note> that libguestfs now requires minimum OCaml 4.04.  It will not
+compile on RHEL 6.
+
+B<Note> that libosinfo is a new required dependency.
+
+OCaml 4.14 is now supported.
+
+C<./configure --disable-ocaml> and C<./configure --disable-perl> now
+disable the OCaml- and Perl-based tools respectively (thanks Simon
+Walter).
+
+Experimental support for compiling on macOS.
+
+When running C<make check-valgrind>, Valgrind logs are no longer
+written to separate files under F<tmp/>.  Instead the output is
+written to the normal F<I<test-name>.log> file.
+
+=begin comment
+
+=head2 Internals
+
+=end comment
+
+=head2 Bugs fixed
+
+=begin comment
+
+https_proxy= ./bugs-in-changelog.sh v1.48.0..
+
+=end comment
+
+=over 4
+
+=item L<https://bugzilla.redhat.com/2133443>
+
+RFE: Support Rocky Linux in virt-customize
+
+=item L<https://bugzilla.redhat.com/2106286>
+
+virt-sysprep: make an effort to support LUKS on LV
+
+=item L<https://bugzilla.redhat.com/2089748>
+
+Removal of "--selinux-relabel" option breaks existing scripts
+
+=item L<https://bugzilla.redhat.com/2075718>
+
+Having to use "--selinux-relabel" is not intuitive given Red Hat products default to selinux enabled.
+
+=item L<https://bugzilla.redhat.com/2072493>
+
+[RFE] Request to add lvm system.devices cleanup operation to virt-sysprep
+
+=item L<https://bugzilla.redhat.com/2059545>
+
+[RHEL 9.0][Nutanix] lvm partition "home" will lost with SCSI disk either in the new cloned VM or restored from a snapshot
+
+=item L<https://bugzilla.redhat.com/2028764>
+
+Install the qemu-guest-agent package during the conversion process
+
+=item L<https://bugzilla.redhat.com/1809453>
+
+[RFE] Add support for LUKS encrypted disks with Clevis & Tang
+
+=item L<https://bugzilla.redhat.com/1554735>
+
+RFE: customize --selinux-relabel should be the default, with --no-selinux-relabel used to opt out
+
+=back
+
+=head1 SEE ALSO
+
+L<http://libguestfs.org/>
+
+=head1 AUTHORS
+
+=begin comment
+
+git shortlog -s v1.48.0..
+
+=end comment
+
+=over 4
+
+=item Laszlo Ersek
+
+=item Richard W.M. Jones
+
+=back
+
+=head1 COPYRIGHT
+
+Copyright (C) 2009-2023 Red Hat Inc.
diff --git a/drivers/Makefile.am b/drivers/Makefile.am
new file mode 100644 (file)
index 0000000..d27fc2e
--- /dev/null
@@ -0,0 +1,152 @@
+# virt-drivers tool
+# Copyright (C) 2009-2023 Red Hat Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+include $(top_srcdir)/subdir-rules.mk
+
+EXTRA_DIST = \
+       $(SOURCES_MLI) $(SOURCES_ML) $(SOURCES_C) \
+       expected-fedora.xml \
+       expected-windows.xml \
+       test-virt-drivers-docs.sh \
+       test-virt-drivers-linux.sh \
+       test-virt-drivers-windows.sh \
+       virt-drivers.pod
+
+SOURCES_MLI = \
+       drivers.mli
+
+SOURCES_ML = \
+       drivers.ml
+
+SOURCES_C = \
+       dummy.c
+
+man_MANS =
+noinst_DATA =
+bin_PROGRAMS =
+
+if HAVE_OCAML
+
+bin_PROGRAMS += virt-drivers
+
+virt_drivers_SOURCES = $(SOURCES_C)
+virt_drivers_CPPFLAGS = \
+       -I. \
+       -I$(top_builddir) \
+       -I$(top_srcdir)/gnulib/lib -I$(top_builddir)/gnulib/lib \
+       -I$(shell $(OCAMLC) -where) \
+       -I$(top_srcdir)/gnulib/lib \
+       -I$(top_srcdir)/common/utils \
+       -I$(top_srcdir)/lib
+virt_drivers_CFLAGS = \
+       -pthread \
+       $(WARN_CFLAGS) $(WERROR_CFLAGS) \
+       $(LIBXML2_CFLAGS)
+
+BOBJECTS = $(SOURCES_ML:.ml=.cmo)
+XOBJECTS = $(BOBJECTS:.cmo=.cmx)
+
+OCAMLPACKAGES = \
+       -package str,unix,guestfs \
+       -I $(top_builddir)/common/utils/.libs \
+       -I $(top_builddir)/gnulib/lib/.libs \
+       -I $(top_builddir)/ocaml \
+       -I $(top_builddir)/common/mlstdutils \
+       -I $(top_builddir)/common/mlutils \
+       -I $(top_builddir)/common/mlgettext \
+       -I $(top_builddir)/common/mlpcre \
+       -I $(top_builddir)/common/mltools \
+       -I $(top_builddir)/common/mldrivers
+if HAVE_OCAML_PKG_GETTEXT
+OCAMLPACKAGES += -package gettext-stub
+endif
+
+OCAMLCLIBS = \
+       -pthread -lpthread \
+       -lutils \
+       $(LIBXML2_LIBS) \
+       $(LIBGUESTFS_LIBS) \
+       $(LIBINTL) \
+       -lgnu
+
+OCAMLFLAGS = $(OCAML_FLAGS) $(OCAML_WARN_ERROR) -ccopt '$(CFLAGS)'
+
+if !HAVE_OCAMLOPT
+OBJECTS = $(BOBJECTS)
+else
+OBJECTS = $(XOBJECTS)
+endif
+
+OCAMLLINKFLAGS = \
+       mlstdutils.$(MLARCHIVE) \
+       mlguestfs.$(MLARCHIVE) \
+       mlgettext.$(MLARCHIVE) \
+       mlpcre.$(MLARCHIVE) \
+       mlcutils.$(MLARCHIVE) \
+       mltools.$(MLARCHIVE) \
+       mldrivers.$(MLARCHIVE) \
+       $(LINK_CUSTOM_OCAMLC_ONLY)
+
+virt_drivers_DEPENDENCIES = \
+       $(OBJECTS) \
+       ../common/mlstdutils/mlstdutils.$(MLARCHIVE) \
+       ../common/mlutils/mlcutils.$(MLARCHIVE) \
+       ../common/mlgettext/mlgettext.$(MLARCHIVE) \
+       ../common/mlpcre/mlpcre.$(MLARCHIVE) \
+       ../common/mltools/mltools.$(MLARCHIVE) \
+       ../common/mldrivers/mldrivers.$(MLARCHIVE) \
+       $(top_builddir)/ocaml-link.sh
+virt_drivers_LINK = \
+       $(top_builddir)/ocaml-link.sh -cclib '$(OCAMLCLIBS)' -- \
+         $(OCAMLFIND) $(BEST) $(OCAMLFLAGS) $(OCAMLPACKAGES) $(OCAMLLINKFLAGS) \
+         $(OBJECTS) -o $@
+
+# Tests.
+
+TESTS_ENVIRONMENT = $(top_builddir)/run --test
+
+TESTS = \
+       test-virt-drivers-docs.sh \
+       test-virt-drivers-linux.sh \
+       test-virt-drivers-windows.sh
+
+check-valgrind:
+       $(MAKE) VG="@VG@" check
+
+# Manual pages and HTML files for the website.
+
+man_MANS += virt-drivers.1
+noinst_DATA += $(top_builddir)/website/virt-drivers.1.html
+
+virt-drivers.1 $(top_builddir)/website/virt-drivers.1.html: stamp-virt-drivers.pod
+
+stamp-virt-drivers.pod: virt-drivers.pod
+       $(PODWRAPPER) \
+         --man virt-drivers.1 \
+         --html $(top_builddir)/website/virt-drivers.1.html \
+         --path $(top_srcdir)/common/options \
+         --license GPLv2+ \
+         --warning safe \
+         $<
+       touch $@
+
+# OCaml dependencies.
+.depend: $(srcdir)/*.mli $(srcdir)/*.ml
+       $(top_builddir)/ocaml-dep.sh $^
+-include .depend
+
+endif
diff --git a/drivers/Makefile.in b/drivers/Makefile.in
new file mode 100644 (file)
index 0000000..a4b1463
--- /dev/null
@@ -0,0 +1,1483 @@
+# Makefile.in generated by automake 1.16.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2021 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# virt-drivers tool
+# Copyright (C) 2009-2023 Red Hat Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+# libguestfs
+# Copyright (C) 2009-2023 Red Hat Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+# subdir-rules.mk should be included in every *subdirectory* Makefile.am.
+
+# libguestfs
+# Copyright (C) 2013 Red Hat Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+# 'common-rules.mk' should be included in every Makefile.am.
+# cf. 'subdir-rules.mk'
+
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+bin_PROGRAMS = $(am__EXEEXT_1)
+@HAVE_OCAML_TRUE@am__append_1 = virt-drivers
+@HAVE_OCAML_PKG_GETTEXT_TRUE@@HAVE_OCAML_TRUE@am__append_2 = -package gettext-stub
+
+# Manual pages and HTML files for the website.
+@HAVE_OCAML_TRUE@am__append_3 = virt-drivers.1
+@HAVE_OCAML_TRUE@am__append_4 = $(top_builddir)/website/virt-drivers.1.html
+subdir = drivers
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
+       $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+       $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+       $(top_srcdir)/m4/ocaml.m4 $(top_srcdir)/m4/guestfs-progs.m4 \
+       $(top_srcdir)/m4/guestfs-c.m4 \
+       $(top_srcdir)/m4/guestfs-libraries.m4 \
+       $(top_srcdir)/m4/guestfs-ocaml-gettext.m4 \
+       $(top_srcdir)/m4/guestfs-ocaml.m4 \
+       $(top_srcdir)/m4/guestfs-perl.m4 \
+       $(top_srcdir)/m4/guestfs-misc-libraries.m4 \
+       $(top_srcdir)/m4/guestfs-bash-completion.m4 \
+       $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+@HAVE_OCAML_TRUE@am__EXEEXT_1 = virt-drivers$(EXEEXT)
+am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"
+PROGRAMS = $(bin_PROGRAMS)
+am__virt_drivers_SOURCES_DIST = dummy.c
+am__objects_1 = virt_drivers-dummy.$(OBJEXT)
+@HAVE_OCAML_TRUE@am_virt_drivers_OBJECTS = $(am__objects_1)
+virt_drivers_OBJECTS = $(am_virt_drivers_OBJECTS)
+virt_drivers_LDADD = $(LDADD)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/virt_drivers-dummy.Po
+am__mv = mv -f
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+       $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+       $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+       $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = $(virt_drivers_SOURCES)
+DIST_SOURCES = $(am__virt_drivers_SOURCES_DIST)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+man1dir = $(mandir)/man1
+NROFF = nroff
+MANS = $(man_MANS)
+DATA = $(noinst_DATA)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+am__tty_colors_dummy = \
+  mgn= red= grn= lgn= blu= brg= std=; \
+  am__color_tests=no
+am__tty_colors = { \
+  $(am__tty_colors_dummy); \
+  if test "X$(AM_COLOR_TESTS)" = Xno; then \
+    am__color_tests=no; \
+  elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+    am__color_tests=yes; \
+  elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+    am__color_tests=yes; \
+  fi; \
+  if test $$am__color_tests = yes; then \
+    red='\e[0;31m'; \
+    grn='\e[0;32m'; \
+    lgn='\e[1;32m'; \
+    blu='\e[1;34m'; \
+    mgn='\e[0;35m'; \
+    brg='\e[1m'; \
+    std='\e[m'; \
+  fi; \
+}
+am__recheck_rx = ^[    ]*:recheck:[    ]*
+am__global_test_result_rx = ^[         ]*:global-test-result:[         ]*
+am__copy_in_global_log_rx = ^[         ]*:copy-in-global-log:[         ]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+  recheck = 1; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+        { \
+          if ((getline line2 < ($$0 ".log")) < 0) \
+           recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+        { \
+          recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+        { \
+          break; \
+        } \
+    }; \
+  if (recheck) \
+    print $$0; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+  print "fatal: making $@: " msg | "cat >&2"; \
+  exit 1; \
+} \
+function rst_section(header) \
+{ \
+  print header; \
+  len = length(header); \
+  for (i = 1; i <= len; i = i + 1) \
+    printf "="; \
+  printf "\n\n"; \
+} \
+{ \
+  copy_in_global_log = 1; \
+  global_test_result = "RUN"; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+         fatal("failed to read from " $$0 ".trs"); \
+      if (line ~ /$(am__global_test_result_rx)/) \
+        { \
+          sub("$(am__global_test_result_rx)", "", line); \
+          sub("[       ]*$$", "", line); \
+          global_test_result = line; \
+        } \
+      else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+        copy_in_global_log = 0; \
+    }; \
+  if (copy_in_global_log) \
+    { \
+      rst_section(global_test_result ": " $$0); \
+      while ((rc = (getline line < ($$0 ".log"))) != 0) \
+      { \
+        if (rc < 0) \
+          fatal("failed to read from " $$0 ".log"); \
+        print line; \
+      }; \
+      printf "\n"; \
+    }; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/   &   /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# Solaris 10 'make', and several other traditional 'make' implementations,
+# pass "-e" to $(SHELL), and POSIX 2008 even requires this.  Work around it
+# by disabling -e (using the XSI extension "set +e") if it's set.
+am__sh_e_setup = case $$- in *e*) set +e;; esac
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+  --color-tests "$$am__color_tests" \
+  --enable-hard-errors "$$am__enable_hard_errors" \
+  --expect-failure "$$am__expect_failure"
+# To be inserted before the command running the test.  Creates the
+# directory for the log if needed.  Stores in $dir the directory
+# containing $f, in $tst the test, in $log the log.  Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT.  Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup);                                     \
+$(am__vpath_adj_setup) $(am__vpath_adj)                        \
+$(am__tty_colors);                                     \
+srcdir=$(srcdir); export srcdir;                       \
+case "$@" in                                           \
+  */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;;   \
+    *) am__odir=.;;                                    \
+esac;                                                  \
+test "x$$am__odir" = x"." || test -d "$$am__odir"      \
+  || $(MKDIR_P) "$$am__odir" || exit $$?;              \
+if test -f "./$$f"; then dir=./;                       \
+elif test -f "$$f"; then dir=;                         \
+else dir="$(srcdir)/"; fi;                             \
+tst=$$dir$$f; log='$@';                                \
+if test -n '$(DISABLE_HARD_ERRORS)'; then              \
+  am__enable_hard_errors=no;                           \
+else                                                   \
+  am__enable_hard_errors=yes;                          \
+fi;                                                    \
+case " $(XFAIL_TESTS) " in                             \
+  *[\ \        ]$$f[\ \        ]* | *[\ \      ]$$dir$$f[\ \   ]*) \
+    am__expect_failure=yes;;                           \
+  *)                                                   \
+    am__expect_failure=no;;                            \
+esac;                                                  \
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed).  The result is saved in the shell variable
+# '$bases'.  This honors runtime overriding of TESTS and TEST_LOGS.  Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+  bases='$(TEST_LOGS)'; \
+  bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+  bases=`echo $$bases`
+AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)'
+RECHECK_LOGS = $(TEST_LOGS)
+AM_RECURSIVE_TARGETS = check recheck
+TEST_SUITE_LOG = test-suite.log
+TEST_EXTENSIONS = @EXEEXT@ .test
+LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
+am__set_b = \
+  case '$@' in \
+    */*) \
+      case '$*' in \
+        */*) b='$*';; \
+          *) b=`echo '$@' | sed 's/\.log$$//'`; \
+       esac;; \
+    *) \
+      b='$*';; \
+  esac
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log)
+TEST_LOGS = $(am__test_logs2:.test.log=.log)
+TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver
+TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
+       $(TEST_LOG_FLAGS)
+am__DIST_COMMON = $(srcdir)/Makefile.in \
+       $(top_srcdir)/build-aux/depcomp \
+       $(top_srcdir)/build-aux/test-driver \
+       $(top_srcdir)/common-rules.mk $(top_srcdir)/subdir-rules.mk
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BASH_COMPLETIONS_DIR = @BASH_COMPLETIONS_DIR@
+BASH_COMPLETION_CFLAGS = @BASH_COMPLETION_CFLAGS@
+BASH_COMPLETION_LIBS = @BASH_COMPLETION_LIBS@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CSCOPE = @CSCOPE@
+CTAGS = @CTAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+ETAGS = @ETAGS@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GCC_VISIBILITY_HIDDEN = @GCC_VISIBILITY_HIDDEN@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INTLLIBS = @INTLLIBS@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+JANSSON_CFLAGS = @JANSSON_CFLAGS@
+JANSSON_LIBS = @JANSSON_LIBS@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBCRYPT_CFLAGS = @LIBCRYPT_CFLAGS@
+LIBCRYPT_LIBS = @LIBCRYPT_LIBS@
+LIBGUESTFS_CFLAGS = @LIBGUESTFS_CFLAGS@
+LIBGUESTFS_LIBS = @LIBGUESTFS_LIBS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBLZMA_CFLAGS = @LIBLZMA_CFLAGS@
+LIBLZMA_LIBS = @LIBLZMA_LIBS@
+LIBOBJS = @LIBOBJS@
+LIBOSINFO_CFLAGS = @LIBOSINFO_CFLAGS@
+LIBOSINFO_LIBS = @LIBOSINFO_LIBS@
+LIBS = @LIBS@
+LIBTINFO_CFLAGS = @LIBTINFO_CFLAGS@
+LIBTINFO_LIBS = @LIBTINFO_LIBS@
+LIBTOOL = @LIBTOOL@
+LIBVIRT_CFLAGS = @LIBVIRT_CFLAGS@
+LIBVIRT_LIBS = @LIBVIRT_LIBS@
+LIBXML2_CFLAGS = @LIBXML2_CFLAGS@
+LIBXML2_LIBS = @LIBXML2_LIBS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+MKISOFS = @MKISOFS@
+MSGCAT = @MSGCAT@
+MSGFMT = @MSGFMT@
+MSGMERGE = @MSGMERGE@
+MSGMERGE_FOR_MSGFMT_OPTION = @MSGMERGE_FOR_MSGFMT_OPTION@
+NCURSES_CONFIG = @NCURSES_CONFIG@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OCAMLBEST = @OCAMLBEST@
+OCAMLBUILD = @OCAMLBUILD@
+OCAMLC = @OCAMLC@
+OCAMLCDOTOPT = @OCAMLCDOTOPT@
+OCAMLDEP = @OCAMLDEP@
+OCAMLDOC = @OCAMLDOC@
+OCAMLFIND = @OCAMLFIND@
+OCAMLLIB = @OCAMLLIB@
+OCAMLMKLIB = @OCAMLMKLIB@
+OCAMLMKTOP = @OCAMLMKTOP@
+OCAMLOPT = @OCAMLOPT@
+OCAMLOPTDOTOPT = @OCAMLOPTDOTOPT@
+OCAMLVERSION = @OCAMLVERSION@
+OCAML_FLAGS = @OCAML_FLAGS@
+OCAML_GETTEXT = @OCAML_GETTEXT@
+OCAML_PKG_gettext = @OCAML_PKG_gettext@
+OCAML_PKG_guestfs = @OCAML_PKG_guestfs@
+OCAML_PKG_ounit2 = @OCAML_PKG_ounit2@
+OCAML_RUNTIME_VARIANT_PIC_OPTION = @OCAML_RUNTIME_VARIANT_PIC_OPTION@
+OCAML_WARN_ERROR = @OCAML_WARN_ERROR@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PACKAGE_VERSION_FULL = @PACKAGE_VERSION_FULL@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PCRE2_CFLAGS = @PCRE2_CFLAGS@
+PCRE2_CONFIG = @PCRE2_CONFIG@
+PCRE2_LIBS = @PCRE2_LIBS@
+PERL = @PERL@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+PO4A_GETTEXTIZE = @PO4A_GETTEXTIZE@
+PO4A_TRANSLATE = @PO4A_TRANSLATE@
+PODWRAPPER = @PODWRAPPER@
+POSUB = @POSUB@
+RANLIB = @RANLIB@
+REALPATH = @REALPATH@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SQLITE3 = @SQLITE3@
+STRIP = @STRIP@
+SYSCONFDIR = @SYSCONFDIR@
+USE_NLS = @USE_NLS@
+VALGRIND = @VALGRIND@
+VERSION = @VERSION@
+VERSION_SCRIPT_FLAGS = @VERSION_SCRIPT_FLAGS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMLLINT = @XMLLINT@
+XZCAT = @XZCAT@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+libvirt_ro_uri = @libvirt_ro_uri@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+ounit_is_v2 = @ounit_is_v2@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+# Files that should universally be removed by 'make clean'.  Note if
+# there is any case in any subdirectory where a file should not be
+# removed by 'make clean', it should not be listed here!
+
+# Editor backup files
+
+# Patch original and reject files.
+
+# OCaml intermediate and generated files.
+
+# OCaml -annot files (used for displaying types in some IDEs).
+
+# OCaml oUnit generated files.
+
+# Manual pages - these are all generated from *.pod, so the
+# pages themselves should all be removed by 'make clean'.
+
+# Stamp files used when generating man pages.
+
+# Bindtests temporary files used in many language bindings.
+CLEANFILES = *~ *.bak *.orig *.rej *.cmi *.cmo *.cma *.cmx *.cmxa \
+       dll*.so *.a *.annot oUnit-*.cache oUnit-*.log *.1 *.3 *.5 *.8 \
+       stamp-*.pod bindtests.tmp
+
+# Files that should be universally removed by 'make distclean'.
+DISTCLEANFILES = .depend stamp-*
+
+# Special suffixes used by OCaml.
+
+# Special suffixes used by PO files.
+SUFFIXES = .cmo .cmi .cmx .ml .mli .mll .mly .po .gmo
+LOG_DRIVER = env $(SHELL) $(top_srcdir)/build-aux/guestfs-test-driver
+
+# Rules for building OCaml objects.
+# See also:
+# guestfs-hacking(1) section "HOW OCAML PROGRAMS ARE COMPILED AND LINKED"
+@HAVE_OCAMLOPT_FALSE@MLARCHIVE = cma
+@HAVE_OCAMLOPT_TRUE@MLARCHIVE = cmxa
+@HAVE_OCAMLOPT_FALSE@LINK_CUSTOM_OCAMLC_ONLY = -custom
+@HAVE_OCAMLOPT_FALSE@BEST = c
+@HAVE_OCAMLOPT_TRUE@BEST = opt
+
+# custom silent rules
+guestfs_am_v_ocamlc = $(guestfs_am_v_ocamlc_@AM_V@)
+guestfs_am_v_ocamlc_ = $(guestfs_am_v_ocamlc_@AM_DEFAULT_V@)
+guestfs_am_v_ocamlc_0 = @echo "  OCAMLC  " $@;
+guestfs_am_v_ocamlcmi = $(guestfs_am_v_ocamlcmi_@AM_V@)
+guestfs_am_v_ocamlcmi_ = $(guestfs_am_v_ocamlcmi_@AM_DEFAULT_V@)
+guestfs_am_v_ocamlcmi_0 = @echo "  OCAMLCMI" $@;
+guestfs_am_v_ocamlopt = $(guestfs_am_v_ocamlopt_@AM_V@)
+guestfs_am_v_ocamlopt_ = $(guestfs_am_v_ocamlopt_@AM_DEFAULT_V@)
+guestfs_am_v_ocamlopt_0 = @echo "  OCAMLOPT" $@;
+guestfs_am_v_javac = $(guestfs_am_v_javac_@AM_V@)
+guestfs_am_v_javac_ = $(guestfs_am_v_javac_@AM_DEFAULT_V@)
+guestfs_am_v_javac_0 = @echo "  JAVAC   " $@;
+guestfs_am_v_erlc = $(guestfs_am_v_erlc_@AM_V@)
+guestfs_am_v_erlc_ = $(guestfs_am_v_erlc_@AM_DEFAULT_V@)
+guestfs_am_v_erlc_0 = @echo "  ERLC    " $@;
+guestfs_am_v_podwrapper = $(guestfs_am_v_podwrapper_@AM_V@)
+guestfs_am_v_podwrapper_ = $(guestfs_am_v_podwrapper_@AM_DEFAULT_V@)
+guestfs_am_v_podwrapper_0 = @echo "  POD     " $@;
+guestfs_am_v_jar = $(guestfs_am_v_jar_@AM_V@)
+guestfs_am_v_jar_ = $(guestfs_am_v_jar_@AM_DEFAULT_V@)
+guestfs_am_v_jar_0 = @echo "  JAR     " $@;
+guestfs_am_v_po4a_translate = $(guestfs_am_v_po4a_translate_@AM_V@)
+guestfs_am_v_po4a_translate_ = $(guestfs_am_v_po4a_translate_@AM_DEFAULT_V@)
+guestfs_am_v_po4a_translate_0 = @echo "  PO4A-T  " $@;
+EXTRA_DIST = \
+       $(SOURCES_MLI) $(SOURCES_ML) $(SOURCES_C) \
+       expected-fedora.xml \
+       expected-windows.xml \
+       test-virt-drivers-docs.sh \
+       test-virt-drivers-linux.sh \
+       test-virt-drivers-windows.sh \
+       virt-drivers.pod
+
+SOURCES_MLI = \
+       drivers.mli
+
+SOURCES_ML = \
+       drivers.ml
+
+SOURCES_C = \
+       dummy.c
+
+man_MANS = $(am__append_3)
+noinst_DATA = $(am__append_4)
+@HAVE_OCAML_TRUE@virt_drivers_SOURCES = $(SOURCES_C)
+@HAVE_OCAML_TRUE@virt_drivers_CPPFLAGS = \
+@HAVE_OCAML_TRUE@      -I. \
+@HAVE_OCAML_TRUE@      -I$(top_builddir) \
+@HAVE_OCAML_TRUE@      -I$(top_srcdir)/gnulib/lib -I$(top_builddir)/gnulib/lib \
+@HAVE_OCAML_TRUE@      -I$(shell $(OCAMLC) -where) \
+@HAVE_OCAML_TRUE@      -I$(top_srcdir)/gnulib/lib \
+@HAVE_OCAML_TRUE@      -I$(top_srcdir)/common/utils \
+@HAVE_OCAML_TRUE@      -I$(top_srcdir)/lib
+
+@HAVE_OCAML_TRUE@virt_drivers_CFLAGS = \
+@HAVE_OCAML_TRUE@      -pthread \
+@HAVE_OCAML_TRUE@      $(WARN_CFLAGS) $(WERROR_CFLAGS) \
+@HAVE_OCAML_TRUE@      $(LIBXML2_CFLAGS)
+
+@HAVE_OCAML_TRUE@BOBJECTS = $(SOURCES_ML:.ml=.cmo)
+@HAVE_OCAML_TRUE@XOBJECTS = $(BOBJECTS:.cmo=.cmx)
+@HAVE_OCAML_TRUE@OCAMLPACKAGES = -package str,unix,guestfs -I \
+@HAVE_OCAML_TRUE@      $(top_builddir)/common/utils/.libs -I \
+@HAVE_OCAML_TRUE@      $(top_builddir)/gnulib/lib/.libs -I \
+@HAVE_OCAML_TRUE@      $(top_builddir)/ocaml -I \
+@HAVE_OCAML_TRUE@      $(top_builddir)/common/mlstdutils -I \
+@HAVE_OCAML_TRUE@      $(top_builddir)/common/mlutils -I \
+@HAVE_OCAML_TRUE@      $(top_builddir)/common/mlgettext -I \
+@HAVE_OCAML_TRUE@      $(top_builddir)/common/mlpcre -I \
+@HAVE_OCAML_TRUE@      $(top_builddir)/common/mltools -I \
+@HAVE_OCAML_TRUE@      $(top_builddir)/common/mldrivers \
+@HAVE_OCAML_TRUE@      $(am__append_2)
+@HAVE_OCAML_TRUE@OCAMLCLIBS = \
+@HAVE_OCAML_TRUE@      -pthread -lpthread \
+@HAVE_OCAML_TRUE@      -lutils \
+@HAVE_OCAML_TRUE@      $(LIBXML2_LIBS) \
+@HAVE_OCAML_TRUE@      $(LIBGUESTFS_LIBS) \
+@HAVE_OCAML_TRUE@      $(LIBINTL) \
+@HAVE_OCAML_TRUE@      -lgnu
+
+@HAVE_OCAML_TRUE@OCAMLFLAGS = $(OCAML_FLAGS) $(OCAML_WARN_ERROR) -ccopt '$(CFLAGS)'
+@HAVE_OCAMLOPT_FALSE@@HAVE_OCAML_TRUE@OBJECTS = $(BOBJECTS)
+@HAVE_OCAMLOPT_TRUE@@HAVE_OCAML_TRUE@OBJECTS = $(XOBJECTS)
+@HAVE_OCAML_TRUE@OCAMLLINKFLAGS = \
+@HAVE_OCAML_TRUE@      mlstdutils.$(MLARCHIVE) \
+@HAVE_OCAML_TRUE@      mlguestfs.$(MLARCHIVE) \
+@HAVE_OCAML_TRUE@      mlgettext.$(MLARCHIVE) \
+@HAVE_OCAML_TRUE@      mlpcre.$(MLARCHIVE) \
+@HAVE_OCAML_TRUE@      mlcutils.$(MLARCHIVE) \
+@HAVE_OCAML_TRUE@      mltools.$(MLARCHIVE) \
+@HAVE_OCAML_TRUE@      mldrivers.$(MLARCHIVE) \
+@HAVE_OCAML_TRUE@      $(LINK_CUSTOM_OCAMLC_ONLY)
+
+@HAVE_OCAML_TRUE@virt_drivers_DEPENDENCIES = \
+@HAVE_OCAML_TRUE@      $(OBJECTS) \
+@HAVE_OCAML_TRUE@      ../common/mlstdutils/mlstdutils.$(MLARCHIVE) \
+@HAVE_OCAML_TRUE@      ../common/mlutils/mlcutils.$(MLARCHIVE) \
+@HAVE_OCAML_TRUE@      ../common/mlgettext/mlgettext.$(MLARCHIVE) \
+@HAVE_OCAML_TRUE@      ../common/mlpcre/mlpcre.$(MLARCHIVE) \
+@HAVE_OCAML_TRUE@      ../common/mltools/mltools.$(MLARCHIVE) \
+@HAVE_OCAML_TRUE@      ../common/mldrivers/mldrivers.$(MLARCHIVE) \
+@HAVE_OCAML_TRUE@      $(top_builddir)/ocaml-link.sh
+
+@HAVE_OCAML_TRUE@virt_drivers_LINK = \
+@HAVE_OCAML_TRUE@      $(top_builddir)/ocaml-link.sh -cclib '$(OCAMLCLIBS)' -- \
+@HAVE_OCAML_TRUE@        $(OCAMLFIND) $(BEST) $(OCAMLFLAGS) $(OCAMLPACKAGES) $(OCAMLLINKFLAGS) \
+@HAVE_OCAML_TRUE@        $(OBJECTS) -o $@
+
+
+# Tests.
+@HAVE_OCAML_TRUE@TESTS_ENVIRONMENT = $(top_builddir)/run --test
+@HAVE_OCAML_TRUE@TESTS = \
+@HAVE_OCAML_TRUE@      test-virt-drivers-docs.sh \
+@HAVE_OCAML_TRUE@      test-virt-drivers-linux.sh \
+@HAVE_OCAML_TRUE@      test-virt-drivers-windows.sh
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .cmo .cmi .cmx .ml .mli .mll .mly .po .gmo .c .lo .log .o .obj .test .test$(EXEEXT) .trs
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(top_srcdir)/subdir-rules.mk $(top_srcdir)/common-rules.mk $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+               && { if test -f $@; then exit 0; else break; fi; }; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign drivers/Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --foreign drivers/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
+       esac;
+$(top_srcdir)/subdir-rules.mk $(top_srcdir)/common-rules.mk $(am__empty):
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-binPROGRAMS: $(bin_PROGRAMS)
+       @$(NORMAL_INSTALL)
+       @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+       fi; \
+       for p in $$list; do echo "$$p $$p"; done | \
+       sed 's/$(EXEEXT)$$//' | \
+       while read p p1; do if test -f $$p \
+        || test -f $$p1 \
+         ; then echo "$$p"; echo "$$p"; else :; fi; \
+       done | \
+       sed -e 'p;s,.*/,,;n;h' \
+           -e 's|.*|.|' \
+           -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+       sed 'N;N;N;s,\n, ,g' | \
+       $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+         { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+           if ($$2 == $$4) files[d] = files[d] " " $$1; \
+           else { print "f", $$3 "/" $$4, $$1; } } \
+         END { for (d in files) print "f", d, files[d] }' | \
+       while read type dir files; do \
+           if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+           test -z "$$files" || { \
+           echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+           $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+           } \
+       ; done
+
+uninstall-binPROGRAMS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+       files=`for p in $$list; do echo "$$p"; done | \
+         sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+             -e 's/$$/$(EXEEXT)/' \
+       `; \
+       test -n "$$list" || exit 0; \
+       echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+       cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+clean-binPROGRAMS:
+       @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
+       echo " rm -f" $$list; \
+       rm -f $$list || exit $$?; \
+       test -n "$(EXEEXT)" || exit 0; \
+       list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+       echo " rm -f" $$list; \
+       rm -f $$list
+
+virt-drivers$(EXEEXT): $(virt_drivers_OBJECTS) $(virt_drivers_DEPENDENCIES) $(EXTRA_virt_drivers_DEPENDENCIES) 
+       @rm -f virt-drivers$(EXEEXT)
+       $(AM_V_GEN)$(virt_drivers_LINK) $(virt_drivers_OBJECTS) $(virt_drivers_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/virt_drivers-dummy.Po@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+       @$(MKDIR_P) $(@D)
+       @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@   $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@   $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+@am__fastdepCC_TRUE@   $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
+@am__fastdepCC_TRUE@   $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@   $(am__mv) $$depbase.Tpo $$depbase.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+virt_drivers-dummy.o: dummy.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(virt_drivers_CPPFLAGS) $(CPPFLAGS) $(virt_drivers_CFLAGS) $(CFLAGS) -MT virt_drivers-dummy.o -MD -MP -MF $(DEPDIR)/virt_drivers-dummy.Tpo -c -o virt_drivers-dummy.o `test -f 'dummy.c' || echo '$(srcdir)/'`dummy.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/virt_drivers-dummy.Tpo $(DEPDIR)/virt_drivers-dummy.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='dummy.c' object='virt_drivers-dummy.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(virt_drivers_CPPFLAGS) $(CPPFLAGS) $(virt_drivers_CFLAGS) $(CFLAGS) -c -o virt_drivers-dummy.o `test -f 'dummy.c' || echo '$(srcdir)/'`dummy.c
+
+virt_drivers-dummy.obj: dummy.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(virt_drivers_CPPFLAGS) $(CPPFLAGS) $(virt_drivers_CFLAGS) $(CFLAGS) -MT virt_drivers-dummy.obj -MD -MP -MF $(DEPDIR)/virt_drivers-dummy.Tpo -c -o virt_drivers-dummy.obj `if test -f 'dummy.c'; then $(CYGPATH_W) 'dummy.c'; else $(CYGPATH_W) '$(srcdir)/dummy.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/virt_drivers-dummy.Tpo $(DEPDIR)/virt_drivers-dummy.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='dummy.c' object='virt_drivers-dummy.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(virt_drivers_CPPFLAGS) $(CPPFLAGS) $(virt_drivers_CFLAGS) $(CFLAGS) -c -o virt_drivers-dummy.obj `if test -f 'dummy.c'; then $(CYGPATH_W) 'dummy.c'; else $(CYGPATH_W) '$(srcdir)/dummy.c'; fi`
+
+mostlyclean-libtool:
+       -rm -f *.lo
+
+clean-libtool:
+       -rm -rf .libs _libs
+install-man1: $(man_MANS)
+       @$(NORMAL_INSTALL)
+       @list1=''; \
+       list2='$(man_MANS)'; \
+       test -n "$(man1dir)" \
+         && test -n "`echo $$list1$$list2`" \
+         || exit 0; \
+       echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
+       $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
+       { for i in $$list1; do echo "$$i"; done;  \
+       if test -n "$$list2"; then \
+         for i in $$list2; do echo "$$i"; done \
+           | sed -n '/\.1[a-z]*$$/p'; \
+       fi; \
+       } | while read p; do \
+         if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; echo "$$p"; \
+       done | \
+       sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+             -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+       sed 'N;N;s,\n, ,g' | { \
+       list=; while read file base inst; do \
+         if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+           echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+           $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+         fi; \
+       done; \
+       for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+       while read files; do \
+         test -z "$$files" || { \
+           echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+           $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+       done; }
+
+uninstall-man1:
+       @$(NORMAL_UNINSTALL)
+       @list=''; test -n "$(man1dir)" || exit 0; \
+       files=`{ for i in $$list; do echo "$$i"; done; \
+       l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
+         sed -n '/\.1[a-z]*$$/p'; \
+       } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+             -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+       dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
+
+ID: $(am__tagged_files)
+       $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       set x; \
+       here=`pwd`; \
+       $(am__define_uniq_tagged_files); \
+       shift; \
+       if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         if test $$# -gt 0; then \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             "$$@" $$unique; \
+         else \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             $$unique; \
+         fi; \
+       fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       $(am__define_uniq_tagged_files); \
+       test -z "$(CTAGS_ARGS)$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && $(am__cd) $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+       list='$(am__tagged_files)'; \
+       case "$(srcdir)" in \
+         [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+         *) sdir=$(subdir)/$(srcdir) ;; \
+       esac; \
+       for i in $$list; do \
+         if test -f "$$i"; then \
+           echo "$(subdir)/$$i"; \
+         else \
+           echo "$$sdir/$$i"; \
+         fi; \
+       done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'.  Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+       rm -f $< $@
+       $(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+       @:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+       @$(am__set_TESTS_bases); \
+       am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+       redo_bases=`for i in $$bases; do \
+                     am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+                   done`; \
+       if test -n "$$redo_bases"; then \
+         redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+         redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+         if $(am__make_dryrun); then :; else \
+           rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+         fi; \
+       fi; \
+       if test -n "$$am__remaking_logs"; then \
+         echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+              "recursion detected" >&2; \
+       elif test -n "$$redo_logs"; then \
+         am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+       fi; \
+       if $(am__make_dryrun); then :; else \
+         st=0;  \
+         errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+         for i in $$redo_bases; do \
+           test -f $$i.trs && test -r $$i.trs \
+             || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+           test -f $$i.log && test -r $$i.log \
+             || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+         done; \
+         test $$st -eq 0 || exit 1; \
+       fi
+       @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+       ws='[   ]'; \
+       results=`for b in $$bases; do echo $$b.trs; done`; \
+       test -n "$$results" || results=/dev/null; \
+       all=`  grep "^$$ws*:test-result:"           $$results | wc -l`; \
+       pass=` grep "^$$ws*:test-result:$$ws*PASS"  $$results | wc -l`; \
+       fail=` grep "^$$ws*:test-result:$$ws*FAIL"  $$results | wc -l`; \
+       skip=` grep "^$$ws*:test-result:$$ws*SKIP"  $$results | wc -l`; \
+       xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+       xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+       error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+       if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+         success=true; \
+       else \
+         success=false; \
+       fi; \
+       br='==================='; br=$$br$$br$$br$$br; \
+       result_count () \
+       { \
+           if test x"$$1" = x"--maybe-color"; then \
+             maybe_colorize=yes; \
+           elif test x"$$1" = x"--no-color"; then \
+             maybe_colorize=no; \
+           else \
+             echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+           fi; \
+           shift; \
+           desc=$$1 count=$$2; \
+           if test $$maybe_colorize = yes && test $$count -gt 0; then \
+             color_start=$$3 color_end=$$std; \
+           else \
+             color_start= color_end=; \
+           fi; \
+           echo "$${color_start}# $$desc $$count$${color_end}"; \
+       }; \
+       create_testsuite_report () \
+       { \
+         result_count $$1 "TOTAL:" $$all   "$$brg"; \
+         result_count $$1 "PASS: " $$pass  "$$grn"; \
+         result_count $$1 "SKIP: " $$skip  "$$blu"; \
+         result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+         result_count $$1 "FAIL: " $$fail  "$$red"; \
+         result_count $$1 "XPASS:" $$xpass "$$red"; \
+         result_count $$1 "ERROR:" $$error "$$mgn"; \
+       }; \
+       {                                                               \
+         echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" |       \
+           $(am__rst_title);                                           \
+         create_testsuite_report --no-color;                           \
+         echo;                                                         \
+         echo ".. contents:: :depth: 2";                               \
+         echo;                                                         \
+         for b in $$bases; do echo $$b; done                           \
+           | $(am__create_global_log);                                 \
+       } >$(TEST_SUITE_LOG).tmp || exit 1;                             \
+       mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG);                     \
+       if $$success; then                                              \
+         col="$$grn";                                                  \
+        else                                                           \
+         col="$$red";                                                  \
+         test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG);               \
+       fi;                                                             \
+       echo "$${col}$$br$${std}";                                      \
+       echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \
+       echo "$${col}$$br$${std}";                                      \
+       create_testsuite_report --maybe-color;                          \
+       echo "$$col$$br$$std";                                          \
+       if $$success; then :; else                                      \
+         echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}";         \
+         if test -n "$(PACKAGE_BUGREPORT)"; then                       \
+           echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \
+         fi;                                                           \
+         echo "$$col$$br$$std";                                        \
+       fi;                                                             \
+       $$success || exit 1
+
+check-TESTS: 
+       @list='$(RECHECK_LOGS)';           test -z "$$list" || rm -f $$list
+       @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+       @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+       @set +e; $(am__set_TESTS_bases); \
+       log_list=`for i in $$bases; do echo $$i.log; done`; \
+       trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+       log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+       $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+       exit $$?;
+recheck: all 
+       @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+       @set +e; $(am__set_TESTS_bases); \
+       bases=`for i in $$bases; do echo $$i; done \
+                | $(am__list_recheck_tests)` || exit 1; \
+       log_list=`for i in $$bases; do echo $$i.log; done`; \
+       log_list=`echo $$log_list`; \
+       $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+               am__force_recheck=am--force-recheck \
+               TEST_LOGS="$$log_list"; \
+       exit $$?
+test-virt-drivers-docs.sh.log: test-virt-drivers-docs.sh
+       @p='test-virt-drivers-docs.sh'; \
+       b='test-virt-drivers-docs.sh'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+test-virt-drivers-linux.sh.log: test-virt-drivers-linux.sh
+       @p='test-virt-drivers-linux.sh'; \
+       b='test-virt-drivers-linux.sh'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+test-virt-drivers-windows.sh.log: test-virt-drivers-windows.sh
+       @p='test-virt-drivers-windows.sh'; \
+       b='test-virt-drivers-windows.sh'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+.test.log:
+       @p='$<'; \
+       $(am__set_b); \
+       $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+@am__EXEEXT_TRUE@.test$(EXEEXT).log:
+@am__EXEEXT_TRUE@      @p='$<'; \
+@am__EXEEXT_TRUE@      $(am__set_b); \
+@am__EXEEXT_TRUE@      $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+@am__EXEEXT_TRUE@      --log-file $$b.log --trs-file $$b.trs \
+@am__EXEEXT_TRUE@      $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+@am__EXEEXT_TRUE@      "$$tst" $(AM_TESTS_FD_REDIRECT)
+distdir: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d "$(distdir)/$$file"; then \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+         else \
+           test -f "$(distdir)/$$file" \
+           || cp -p $$d/$$file "$(distdir)/$$file" \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+       $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: check-am
+all-am: Makefile $(PROGRAMS) $(MANS) $(DATA)
+installdirs:
+       for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       if test -z '$(STRIP)'; then \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+             install; \
+       else \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+           "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+       fi
+mostlyclean-generic:
+       -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
+       -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+       -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+
+clean-generic:
+       -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+       -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+               -rm -f ./$(DEPDIR)/virt_drivers-dummy.Po
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-binPROGRAMS
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man: install-man1
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+               -rm -f ./$(DEPDIR)/virt_drivers-dummy.Po
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS uninstall-man
+
+uninstall-man: uninstall-man1
+
+.MAKE: check-am install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \
+       check-am clean clean-binPROGRAMS clean-generic clean-libtool \
+       cscopelist-am ctags ctags-am distclean distclean-compile \
+       distclean-generic distclean-libtool distclean-tags distdir dvi \
+       dvi-am html html-am info info-am install install-am \
+       install-binPROGRAMS install-data install-data-am install-dvi \
+       install-dvi-am install-exec install-exec-am install-html \
+       install-html-am install-info install-info-am install-man \
+       install-man1 install-pdf install-pdf-am install-ps \
+       install-ps-am install-strip installcheck installcheck-am \
+       installdirs maintainer-clean maintainer-clean-generic \
+       mostlyclean mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool pdf pdf-am ps ps-am recheck tags tags-am \
+       uninstall uninstall-am uninstall-binPROGRAMS uninstall-man \
+       uninstall-man1
+
+.PRECIOUS: Makefile
+
+
+-include $(top_builddir)/localenv
+
+# Individual Makefile.am's should define generator_built if that
+# subdirectory contains any files which are built by the generator.
+# Set generator_built to the list of those files.
+
+$(generator_built): $(top_builddir)/generator/stamp-generator
+
+$(top_builddir)/generator/stamp-generator: $(top_builddir)/generator/generator
+       @if test -f $(top_builddir)/generator/Makefile; then \
+         $(MAKE) -C $(top_builddir)/generator stamp-generator; \
+       else \
+         echo "warning: Run 'make' at the top level to build $(generator_built)"; \
+       fi
+
+# If this file doesn't exist, just print a warning and continue.
+# During 'make distclean' we can end up deleting this file.
+$(top_builddir)/generator/generator:
+       @if test -f $(top_builddir)/generator/Makefile; then \
+         $(MAKE) -C $(top_builddir)/generator generator; \
+       else \
+         echo "warning: Run 'make' at the top level to build $@"; \
+       fi
+
+%.cmi: %.mli
+       $(guestfs_am_v_ocamlcmi)$(OCAMLFIND) ocamlc $(OCAMLFLAGS) $(OCAMLPACKAGES) -c $< -o $@
+%.cmo: %.ml
+       $(guestfs_am_v_ocamlc)$(OCAMLFIND) ocamlc $(OCAMLFLAGS) $(OCAMLPACKAGES) -c $< -o $@
+@HAVE_OCAMLOPT_TRUE@%.cmx: %.ml
+@HAVE_OCAMLOPT_TRUE@   $(guestfs_am_v_ocamlopt)$(OCAMLFIND) ocamlopt $(OCAMLFLAGS) $(OCAMLPACKAGES) -c $< -o $@
+
+# Test shell scripts should use '$TEST_FUNCTIONS' to get a predefined
+# set of helper functions for running tests (see test-functions.sh).
+#
+# Notes:
+#
+# (1) This is in fact a single command all on one line.  The variables
+# are evaluated in test-functions.sh.
+#
+# (2) We use absolute paths here and in test-functions.sh so that the
+# test can change directory freely.  But we also include the
+# non-absolute values so they can be used by the test script itself.
+export TEST_FUNCTIONS := \
+       source $(abs_top_srcdir)/test-functions.sh \
+       abs_srcdir="$(abs_srcdir)" \
+       abs_builddir="$(abs_builddir)" \
+       top_srcdir="$(top_srcdir)" \
+       top_builddir="$(top_builddir)" \
+       abs_top_srcdir="$(abs_top_srcdir)" \
+       abs_top_builddir="$(abs_top_builddir)"
+
+@HAVE_OCAML_TRUE@check-valgrind:
+@HAVE_OCAML_TRUE@      $(MAKE) VG="@VG@" check
+
+@HAVE_OCAML_TRUE@virt-drivers.1 $(top_builddir)/website/virt-drivers.1.html: stamp-virt-drivers.pod
+
+@HAVE_OCAML_TRUE@stamp-virt-drivers.pod: virt-drivers.pod
+@HAVE_OCAML_TRUE@      $(PODWRAPPER) \
+@HAVE_OCAML_TRUE@        --man virt-drivers.1 \
+@HAVE_OCAML_TRUE@        --html $(top_builddir)/website/virt-drivers.1.html \
+@HAVE_OCAML_TRUE@        --path $(top_srcdir)/common/options \
+@HAVE_OCAML_TRUE@        --license GPLv2+ \
+@HAVE_OCAML_TRUE@        --warning safe \
+@HAVE_OCAML_TRUE@        $<
+@HAVE_OCAML_TRUE@      touch $@
+
+# OCaml dependencies.
+@HAVE_OCAML_TRUE@.depend: $(srcdir)/*.mli $(srcdir)/*.ml
+@HAVE_OCAML_TRUE@      $(top_builddir)/ocaml-dep.sh $^
+@HAVE_OCAML_TRUE@-include .depend
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/drivers/drivers.ml b/drivers/drivers.ml
new file mode 100644 (file)
index 0000000..57cfb55
--- /dev/null
@@ -0,0 +1,303 @@
+(* virt-drivers
+ * Copyright (C) 2009-2023 Red Hat Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *)
+
+open Std_utils
+open Tools_utils
+open Common_gettext.Gettext
+open Getopt.OptionName
+open DOM
+
+open Printf
+
+let parse_cmdline () =
+  let blocksize = ref 0 in
+  let domain = ref None in
+  let file = ref None in
+  let libvirturi = ref "" in
+  let format = ref "auto" in
+
+  let set_file arg =
+    if !file <> None then
+      error (f_"--add option can only be given once");
+    let uri =
+      try URI.parse_uri arg
+      with URI.Parse_failed ->
+        error (f_"error parsing URI '%s'. \
+                  Look for error messages printed above.") arg in
+    file := Some uri
+  and set_domain dom =
+    if !domain <> None then
+      error (f_"--domain option can only be given once");
+    domain := Some dom
+  in
+
+  let argspec = [
+    [ S 'a'; L"add" ], Getopt.String (s_"file", set_file), s_"Add disk image file";
+    [ L"blocksize" ], Getopt.Set_int ("512|4096", blocksize), s_"Set disk sector size";
+    [ S 'c'; L"connect" ], Getopt.Set_string (s_"uri", libvirturi), s_"Set libvirt URI";
+    [ S 'd'; L"domain" ], Getopt.String (s_"domain", set_domain), s_"Set libvirt guest name";
+    [ L"format" ], Getopt.Set_string (s_"format", format), s_"Format of input disk";
+  ] in
+  let usage_msg =
+    sprintf (f_"\
+%s: detect bootloader, kernel and drivers inside guest
+
+A short summary of the options is given below.  For detailed help please
+read the man page virt-drivers(1).
+")
+      prog in
+  let opthandle = create_standard_options argspec ~key_opts:true usage_msg in
+  Getopt.parse opthandle.getopt;
+
+  (* Check -a and -d options. *)
+  let file = !file in
+  let domain = !domain in
+  let libvirturi = match !libvirturi with "" -> None | s -> Some s in
+  let add =
+    match file, domain with
+    | None, None ->
+      error (f_"you must give either -a or -d options.  \
+                Read virt-drivers(1) man page for further information.")
+    | Some _, Some _ ->
+      error (f_"you cannot give -a and -d options together.  \
+                Read virt-drivers(1) man page for further information.")
+    | None, Some dom ->
+      fun (g : Guestfs.guestfs) ->
+        let readonlydisk = "ignore" (* ignore CDs, data drives *) in
+        ignore (g#add_domain
+                  ~readonly:true ~allowuuid:true ~readonlydisk
+                  ?libvirturi dom)
+    | Some uri, None ->
+      fun g ->
+        let { URI.path; protocol; server; username; password } = uri in
+        let format = match !format with "auto" -> None | s -> Some s in
+        let blocksize = match !blocksize with 0 -> None | i -> Some i in
+        g#add_drive
+          ~readonly:true ?blocksize ?format ~protocol ?server ?username
+          ?secret:password path
+  in
+
+  add, opthandle.ks
+
+let rec do_detection g roots =
+  let comment = Comment generated_by in
+  let firmware, firmware_xml = do_detect_firmware g in
+  let oses = List.map (fun root -> do_detect_os g root firmware) roots in
+  let doc : DOM.doc =
+    doc "operatingsystems" [] (comment :: firmware_xml @ oses) in
+  doc
+
+and do_detect_firmware g =
+  let firmware = Firmware.detect_firmware g in
+  let xml =
+    match firmware with
+    | Firmware.I_BIOS ->
+       [ e "firmware" ["type", "bios"] [] ]
+    | Firmware.I_UEFI esps ->
+       List.map (fun esp -> e "firmware" ["type", "uefi"] [ PCData esp ])
+         esps in
+  firmware, xml
+
+and do_detect_os g root firmware =
+  let body = ref [] in
+
+  (* Display some of the standard virt-inspector fields. *)
+  List.push_back body (e "root" [] [ PCData root ]);
+  let typ = g#inspect_get_type root in
+  if typ <> "unknown" then
+    List.push_back body (e "name" [] [ PCData typ ]);
+
+  let adds fn field =
+    let v = fn root in
+    if v <> "unknown" then
+      List.push_back body (e field [] [ PCData v ]);
+  and addi fn field =
+    let v = fn root in
+    List.push_back body (e field [] [ PCData (string_of_int v) ]);
+  in
+  adds g#inspect_get_arch               "arch";
+  adds g#inspect_get_distro             "distro";
+  adds g#inspect_get_product_name       "product_name";
+  adds g#inspect_get_product_variant    "product_variant";
+  addi g#inspect_get_major_version      "major_version";
+  addi g#inspect_get_minor_version      "minor_version";
+  adds g#inspect_get_package_format     "package_format";
+  adds g#inspect_get_package_management "package_management";
+  adds g#inspect_get_build_id           "build_id";
+  adds g#inspect_get_osinfo             "osinfo";
+
+  (* Now mount up the disks in order to detect bootloader and kernels. *)
+  let mps = g#inspect_get_mountpoints root in
+  let cmp (a,_) (b,_) = compare (String.length a) (String.length b) in
+  let mps = List.sort cmp mps in
+  List.iter (fun (mp, dev) -> g#mount_ro dev mp) mps;
+
+  (match typ with
+   | "linux" ->
+      (* XXX This shouldn't be necessary.  Linux_* modules should do it. *)
+      g#aug_init "/" 1;
+      let bootloader = do_detect_linux_bootloader g root firmware in
+      List.push_back body bootloader
+   | "windows" ->
+      let drivers = do_detect_windows_drivers g root in
+      List.push_back body drivers
+   | _ -> ()
+  );
+
+  g#umount_all ();
+
+  e "operatingsystem" [] !body
+
+and do_detect_linux_bootloader g root firmware =
+  let bootloader = Linux_bootloaders.detect_bootloader g root firmware in
+  let bl_name = bootloader#name in
+  let bl_config = bootloader#get_config_file () in
+  let kernels = do_detect_linux_kernels g root bootloader in
+  e "bootloader" ["type", bl_name; "config", bl_config] kernels
+
+and do_detect_linux_kernels g root bootloader =
+  let apps = g#inspect_list_applications2 root in
+  let apps = Array.to_list apps in
+  let kernels = Linux_kernels.detect_kernels g root bootloader apps in
+  List.map kernel_info_to_xml kernels
+
+and kernel_info_to_xml { Linux_kernels.ki_name; ki_version;
+                         ki_arch; ki_vmlinuz; ki_initrd; ki_modpath;
+                         ki_modules; ki_supports_virtio_blk;
+                         ki_supports_virtio_net; ki_supports_virtio_rng;
+                         ki_supports_virtio_balloon;
+                         ki_supports_isa_pvpanic;
+                         ki_supports_virtio_socket;
+                         ki_is_xen_pv_only_kernel;
+                         ki_is_debug; ki_config_file } =
+  let body = ref [] in
+  List.push_back body (e "name" []    [ PCData ki_name ]);
+  List.push_back body (e "version" [] [ PCData ki_version ]);
+  List.push_back body (e "arch" []    [ PCData ki_arch ]);
+  List.push_back body (e "vmlinuz" [] [ PCData ki_vmlinuz ]);
+  List.may_push_back body
+    (Option.map (fun v -> e "initrd" [] [ PCData v ]) ki_initrd);
+  List.push_back body (e "modules_path" [] [ PCData ki_modpath ]);
+  List.push_back body (e "modules" []
+                         (List.map (fun m -> e "module" [] [ PCData m ])
+                            (List.sort compare ki_modules)));
+  if ki_supports_virtio_blk then
+    List.push_back body (e "supports_virtio_blk" [] []);
+  if ki_supports_virtio_net then
+    List.push_back body (e "supports_virtio_net" [] []);
+  if ki_supports_virtio_rng then
+    List.push_back body (e "supports_virtio_rng" [] []);
+  if ki_supports_virtio_balloon then
+    List.push_back body (e "supports_virtio_balloon" [] []);
+  if ki_supports_isa_pvpanic then
+    List.push_back body (e "supports_isa_pvpanic" [] []);
+  if ki_supports_virtio_socket then
+    List.push_back body (e "supports_virtio_socket" [] []);
+  if ki_is_xen_pv_only_kernel then
+    List.push_back body (e "is_xen_pv_only_kernel" [] []);
+  if ki_is_debug then
+    List.push_back body (e "debug_kernel" [] []);
+  List.may_push_back body
+    (Option.map (fun v -> e "config_file" []  [ PCData v ]) ki_config_file);
+
+  e "kernel" [] !body
+
+and do_detect_windows_drivers g root =
+  let drivers = Windows_drivers.detect_drivers g root in
+  let drivers = List.map windows_driver_to_xml drivers in
+  e "drivers" [] drivers
+
+and windows_driver_to_xml { Windows_drivers.name; hwassoc } =
+  e "driver" [] (
+    e "name" [] [PCData name] :: List.map windows_hardware_to_xml hwassoc
+  )
+
+and windows_hardware_to_xml = function
+  | Windows_drivers.PCI { pci_class; pci_vendor; pci_device;
+                          pci_subsys; pci_rev } ->
+     let attrs = ref [] in
+     List.may_push_back attrs
+       (Option.map (fun v -> ("class", sprintf "%06LX" v)) pci_class);
+     List.may_push_back attrs
+       (Option.map (fun v -> ("vendor", sprintf "%04LX" v)) pci_vendor);
+     List.may_push_back attrs
+       (Option.map (fun v -> ("device", sprintf "%04LX" v)) pci_device);
+     List.may_push_back attrs
+       (Option.map (fun v -> ("subsystem", sprintf "%08LX" v)) pci_subsys);
+     List.may_push_back attrs
+       (Option.map (fun v -> ("revision", sprintf "%02LX" v)) pci_rev);
+     e "pci" !attrs []
+
+  | HID { hid_vendor; hid_product; hid_rev; hid_col; hid_multi } ->
+     let attrs = ref [] in
+     List.may_push_back attrs
+       (Option.map (fun v -> ("vendor", sprintf "%04LX" v)) hid_vendor);
+     List.may_push_back attrs
+       (Option.map (fun v -> ("product", sprintf "%04LX" v)) hid_product);
+     List.may_push_back attrs
+       (Option.map (fun v -> ("revision", sprintf "%02LX" v)) hid_rev);
+     List.may_push_back attrs
+       (Option.map (fun v -> ("collection", sprintf "%02LX" v)) hid_col);
+     List.may_push_back attrs
+       (Option.map (fun v -> ("identifier", sprintf "%02LX" v)) hid_multi);
+     e "hid" !attrs []
+
+  | USB { usb_vendor; usb_product; usb_rev; usb_multi } ->
+     let attrs = ref [] in
+     List.may_push_back attrs
+       (Option.map (fun v -> ("vendor", sprintf "%04LX" v)) usb_vendor);
+     List.may_push_back attrs
+       (Option.map (fun v -> ("product", sprintf "%04LX" v)) usb_product);
+     List.may_push_back attrs
+       (Option.map (fun v -> ("revision", sprintf "%02LX" v)) usb_rev);
+     List.may_push_back attrs
+       (Option.map (fun v -> ("identifier", sprintf "%02LX" v)) usb_multi);
+     e "usb" !attrs []
+
+  | Other path ->
+     Comment (sprintf "unknown DeviceId: %s" (String.concat "\\" path))
+
+(* Main program. *)
+let main () =
+  let add, ks = parse_cmdline () in
+
+  (* Connect to libguestfs. *)
+  let g = open_guestfs () in
+  add g;
+  g#set_network (key_store_requires_network ks);
+  g#launch ();
+
+  (* Decrypt the disks. *)
+  inspect_decrypt g ks;
+
+  let roots = g#inspect_os () in
+  let roots = Array.to_list roots in
+
+  (* Can't call inspect_mount_root here (ie. normal processing of
+   * the -i option) because it can only handle a single root.
+   *)
+
+  (* Do the detection. *)
+  let doc : DOM.doc = do_detection g roots in
+  DOM.doc_to_chan stdout doc;
+
+  (* Shutdown. *)
+  g#shutdown ();
+  g#close ()
+
+let () = run_main_and_handle_errors main
diff --git a/drivers/drivers.mli b/drivers/drivers.mli
new file mode 100644 (file)
index 0000000..4437e46
--- /dev/null
@@ -0,0 +1,19 @@
+(* virt-get-kernel
+ * Copyright (C) 2013-2023 Red Hat Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *)
+
+(* Nothing is exported. *)
diff --git a/drivers/dummy.c b/drivers/dummy.c
new file mode 100644 (file)
index 0000000..ebab619
--- /dev/null
@@ -0,0 +1,2 @@
+/* Dummy source, to be used for OCaml-based tools with no C sources. */
+enum { foo = 1 };
diff --git a/drivers/expected-fedora.xml b/drivers/expected-fedora.xml
new file mode 100644 (file)
index 0000000..72ea4bf
--- /dev/null
@@ -0,0 +1,31 @@
+<?xml version='1.0' encoding='utf-8'?>
+<operatingsystems>
+  <!-- generated by virt-drivers 1.49.8 -->
+  <firmware type='bios'/>
+  <operatingsystem>
+    <root>/dev/VG/Root</root>
+    <name>linux</name>
+    <arch>x86_64</arch>
+    <distro>fedora</distro>
+    <product_name>Fedora release 14 (Phony)</product_name>
+    <major_version>14</major_version>
+    <minor_version>0</minor_version>
+    <package_format>rpm</package_format>
+    <package_management>yum</package_management>
+    <osinfo>fedora14</osinfo>
+    <bootloader type='grub1' config='/boot/grub/grub.conf'>
+      <kernel>
+        <name>kernel</name>
+        <version>5.19.0-0.rc1.14.fc37.x86_64</version>
+        <arch>x86_64</arch>
+        <vmlinuz>/boot/vmlinuz-5.19.0-0.rc1.14.fc37.x86_64</vmlinuz>
+        <initrd>/boot/initramfs-5.19.0-0.rc1.14.fc37.x86_64.img</initrd>
+        <modules_path>/lib/modules/5.19.0-0.rc1.14.fc37.x86_64</modules_path>
+        <modules>
+          <module>virtio_blk</module>
+        </modules>
+        <supports_virtio_blk/>
+      </kernel>
+    </bootloader>
+  </operatingsystem>
+</operatingsystems>
diff --git a/drivers/expected-windows.xml b/drivers/expected-windows.xml
new file mode 100644 (file)
index 0000000..aa3a856
--- /dev/null
@@ -0,0 +1,26 @@
+<?xml version='1.0' encoding='utf-8'?>
+<operatingsystems>
+  <!-- generated by virt-drivers 1.49.9 -->
+  <firmware type='bios'/>
+  <operatingsystem>
+    <root>/dev/sda2</root>
+    <name>windows</name>
+    <arch>i386</arch>
+    <distro>windows</distro>
+    <product_name>Microsoft Windows 7 Phony Edition</product_name>
+    <product_variant>Client</product_variant>
+    <major_version>6</major_version>
+    <minor_version>1</minor_version>
+    <osinfo>win7</osinfo>
+    <drivers>
+      <driver>
+        <name>machine</name>
+        <pci vendor='8086' device='0008'/>
+      </driver>
+      <driver>
+        <name>mshdc</name>
+        <pci class='000101'/>
+      </driver>
+    </drivers>
+  </operatingsystem>
+</operatingsystems>
diff --git a/drivers/test-virt-drivers-docs.sh b/drivers/test-virt-drivers-docs.sh
new file mode 100755 (executable)
index 0000000..cf23c17
--- /dev/null
@@ -0,0 +1,25 @@
+#!/bin/bash -
+# libguestfs
+# Copyright (C) 2016-2023 Red Hat Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+set -e
+
+$TEST_FUNCTIONS
+skip_if_skipped
+
+$top_srcdir/podcheck.pl "$srcdir/virt-drivers.pod" virt-drivers \
+  --path $top_srcdir/common/options
diff --git a/drivers/test-virt-drivers-linux.sh b/drivers/test-virt-drivers-linux.sh
new file mode 100755 (executable)
index 0000000..df3f36c
--- /dev/null
@@ -0,0 +1,30 @@
+#!/bin/bash -
+# libguestfs
+# Copyright (C) 2016-2023 Red Hat Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+set -e
+
+$TEST_FUNCTIONS
+skip_if_skipped
+skip_unless_phony_guest windows.img
+
+rm -f actual-windows.xml
+
+$VG virt-drivers --format=raw -a ../test-data/phony-guests/windows.img > actual-windows.xml
+diff -ur -I "generated by" expected-windows.xml actual-windows.xml
+
+rm actual-windows.xml
diff --git a/drivers/test-virt-drivers-windows.sh b/drivers/test-virt-drivers-windows.sh
new file mode 100755 (executable)
index 0000000..5404db1
--- /dev/null
@@ -0,0 +1,30 @@
+#!/bin/bash -
+# libguestfs
+# Copyright (C) 2016-2023 Red Hat Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+set -e
+
+$TEST_FUNCTIONS
+skip_if_skipped
+skip_unless_phony_guest fedora.img
+
+rm -f actual-fedora.xml
+
+$VG virt-drivers --format=raw -a ../test-data/phony-guests/fedora.img > actual-fedora.xml
+diff -ur -I "generated by" expected-fedora.xml actual-fedora.xml
+
+rm actual-fedora.xml
diff --git a/drivers/virt-drivers.pod b/drivers/virt-drivers.pod
new file mode 100644 (file)
index 0000000..266dd68
--- /dev/null
@@ -0,0 +1,250 @@
+=head1 NAME
+
+virt-drivers - Detect bootloader, kernel and drivers inside guest
+
+=head1 SYNOPSIS
+
+ virt-drivers [--options] -d domname
+
+ virt-drivers [--options] -a disk.img
+
+=head1 DESCRIPTION
+
+This tool can detect the bootloader, kernel and drivers inside some
+guests from only the disk image.  It can detect, for example, whether
+a disk image needs BIOS or UEFI to boot, and whether it supports
+virtio or requires slower emulated devices.
+
+=head2 Notes
+
+Normally you should distribute hypervisor metadata (eg. libvirt XML or
+OVF) alongside disk images to tell the hypervisor how to boot them.
+This tool is used when this metadata has not been provided.  Work with
+the supplier of the disk image to get them to provide proper metadata.
+
+=head1 XML FORMAT
+
+The output is an XML document.  At the top level it lists the
+operating systems found (the same as L<virt-inspector(1)>):
+
+ <operatingsystems>
+   <operatingsystem>
+     <root>/dev/sda2</root>
+     <name>linux</name>
+     <arch>x86_64</arch>
+     <distro>fedora</distro>
+     ...
+   </operatingsystem>
+   <operatingsystem>
+     <root>/dev/sdb1</root>
+     ...
+   </operatingsystem>
+ </operatingsystems>
+
+=head2 E<lt>firmwareE<gt>
+
+The E<lt>firmwareE<gt> element lists the firmware which is required to
+boot the guest.  For UEFI it will additionally show the EFI system
+partition ("ESP").  Guests may support multiple boot firmwares.  For
+example this guest is detected as using UEFI boot, and the UEFI ESP is
+the first partition of the first disk:
+
+ <operatingsystems>
+   <firmware type='uefi'>/dev/sda1</firmware>
+   <operatingsystem>
+     ...
+
+=head2 E<lt>bootloaderE<gt> and E<lt>kernelE<gt>
+
+The E<lt>bootloaderE<gt> element shows the bootloader found in the
+Linux guest.  If known, this may contain information about what Linux
+kernels are provided.  For example:
+
+ <operatingsystems>
+   <firmware type='bios'/>
+   <operatingsystem>
+     <root>/dev/sda2</root>
+     <name>linux</name>
+     ...
+     <bootloader type='grub2' config='/boot/grub2/grub.cfg'>
+       <kernel>
+         <name>kernel</name>
+         <version>6.1.0-0.rc6.46.fc38.x86_64</version>
+         <vmlinuz>/boot/vmlinuz-6.1.0-0.rc6.46.fc38.x86_64</vmlinuz>
+         <modules>
+           ...
+         </modules>
+         <supports_virtio_blk/>
+         <supports_virtio_net/>
+         ...
+       </kernel>
+     </bootloader>
+
+Many more fields are usually available for Linux guests, including a
+complete list of kernel modules and information about support for
+virtio.  For a complete example see:
+L<https://github.com/rwmjones/guestfs-tools/tree/master/drivers>
+
+=head2 E<lt>driversE<gt>
+
+The E<lt>driversE<gt> element lists information about drivers found in
+Windows guests:
+
+ <operatingsystems>
+   <firmware type='bios'/>
+   <operatingsystem>
+     <root>/dev/sda2</root>
+     <name>windows</name>
+     ...
+     <drivers>
+       <driver>
+         <name>scsidev</name>
+         <pci vendor='1077' device='1216' subsystem='8471101E'/>
+         <pci vendor='1077' device='1216' subsystem='8493101E'/>
+       </driver>
+       ...
+     </drivers>
+
+The driver name (eg. C<scsidev>) corresponds to the Windows driver
+F<.INF> file (eg. F<scsidev.inf>).  The list of PCI, USB etc devices
+are the matching devices which would cause this driver to load at
+boot.
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<--help>
+
+Display help.
+
+=item B<-a> file
+
+=item B<--add> file
+
+Add I<file> which should be a disk image from a virtual machine.
+
+The format of the disk image is auto-detected.  To override this and
+force a particular format use the I<--format> option.
+
+=item B<-a> URI
+
+=item B<--add> URI
+
+Add a remote disk.  The URI format is compatible with guestfish.
+See L<guestfish(1)/ADDING REMOTE STORAGE>.
+
+=item B<--blocksize> B<512>
+
+=item B<--blocksize> B<4096>
+
+This parameter sets the sector size of the disk image added with I<-a>
+option and is ignored for libvirt guest added with I<-d> option.  See
+also L<guestfs(3)/guestfs_add_drive_opts>.
+
+=item B<--colors>
+
+=item B<--colours>
+
+Use ANSI colour sequences to colourize messages.  This is the default
+when the output is a tty.  If the output of the program is redirected
+to a file, ANSI colour sequences are disabled unless you use this
+option.
+
+=item B<-c> URI
+
+=item B<--connect> URI
+
+If using libvirt, connect to the given I<URI>.  If omitted, then we
+connect to the default libvirt hypervisor.
+
+If you specify guest block devices directly (I<-a>), then libvirt is
+not used at all.
+
+=item B<-d> guest
+
+=item B<--domain> guest
+
+Add all the disks from the named libvirt guest.  Domain UUIDs can be
+used instead of names.
+
+=item B<--echo-keys>
+
+When prompting for keys and passphrases, virt-get-kernel normally turns
+echoing off so you cannot see what you are typing.  If you are not
+worried about Tempest attacks and there is no one else in the room
+you can specify this flag to see what you are typing.
+
+=item B<--format> raw|qcow2|..
+
+=item B<--format> auto
+
+The default for the I<-a> option is to auto-detect the format of the
+disk image.  Using this forces the disk format for the I<-a> option
+on the command line.
+
+If you have untrusted raw-format guest disk images, you should use
+this option to specify the disk format.  This avoids a possible
+security problem with malicious guests (CVE-2010-3851).
+
+__INCLUDE:key-option.pod__
+
+__INCLUDE:keys-from-stdin-option.pod__
+
+=item B<-q>
+
+=item B<--quiet>
+
+Don’t print ordinary progress messages.
+
+=item B<-v>
+
+=item B<--verbose>
+
+Enable verbose messages for debugging.
+
+=item B<-V>
+
+=item B<--version>
+
+Display version number and exit.
+
+=item B<--wrap>
+
+Wrap error, warning, and informative messages.  This is the default
+when the output is a tty.  If the output of the program is redirected
+to a file, wrapping is disabled unless you use this option.
+
+=item B<-x>
+
+Enable tracing of libguestfs API calls.
+
+=back
+
+=head1 ENVIRONMENT VARIABLES
+
+For other environment variables which affect all libguestfs programs,
+see L<guestfs(3)/ENVIRONMENT VARIABLES>.
+
+=head1 EXIT STATUS
+
+This program returns 0 if successful, or non-zero if there was an
+error.
+
+=head1 SEE ALSO
+
+L<guestfs(3)>,
+L<guestfish(1)>,
+L<guestmount(1)>,
+L<virt-get-kernel(1)>,
+L<virt-inspector(1)>,
+L<virt-v2v(1)>,
+L<http://libguestfs.org/>.
+
+=head1 AUTHOR
+
+Richard W.M. Jones L<http://people.redhat.com/~rjones/>
+
+=head1 COPYRIGHT
+
+Copyright (C) 2009-2023 Red Hat Inc.
index 3545b66b2043693041bbe3bf2e8691841efea582..e175b044b72d1d210afb75d563ae57d015943e72 100644 (file)
@@ -1,5 +1,5 @@
 # libguestfs virt-edit
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index 52794b50ceb24d580ee0d1742a9c597c04cc51f9..1ba4920b90f8fcad70367a990fb9639292e88f8a 100644 (file)
@@ -15,7 +15,7 @@
 @SET_MAKE@
 
 # libguestfs virt-edit
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -32,7 +32,7 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -488,7 +488,6 @@ EGREP = @EGREP@
 ETAGS = @ETAGS@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FILECMD = @FILECMD@
 GCC_VISIBILITY_HIDDEN = @GCC_VISIBILITY_HIDDEN@
 GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
 GMSGFMT = @GMSGFMT@
@@ -517,6 +516,8 @@ LIBINTL = @LIBINTL@
 LIBLZMA_CFLAGS = @LIBLZMA_CFLAGS@
 LIBLZMA_LIBS = @LIBLZMA_LIBS@
 LIBOBJS = @LIBOBJS@
+LIBOSINFO_CFLAGS = @LIBOSINFO_CFLAGS@
+LIBOSINFO_LIBS = @LIBOSINFO_LIBS@
 LIBS = @LIBS@
 LIBTINFO_CFLAGS = @LIBTINFO_CFLAGS@
 LIBTINFO_LIBS = @LIBTINFO_LIBS@
@@ -587,6 +588,7 @@ PO4A_TRANSLATE = @PO4A_TRANSLATE@
 PODWRAPPER = @PODWRAPPER@
 POSUB = @POSUB@
 RANLIB = @RANLIB@
+REALPATH = @REALPATH@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
index 7f06bce7f4a1a3ea85ecd1cd6f08763264215375..da996dbc2c2c13c91f6ca251dae6de3b8ef730c8 100644 (file)
@@ -1,5 +1,5 @@
 /* virt-edit
- * Copyright (C) 2009-2020 Red Hat Inc.
+ * Copyright (C) 2009-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -68,7 +68,7 @@ usage (int status)
              getprogname ());
   else {
     printf (_("%s: Edit a file in a virtual machine\n"
-              "Copyright (C) 2009-2020 Red Hat Inc.\n"
+              "Copyright (C) 2009-2023 Red Hat Inc.\n"
               "Usage:\n"
               "  %s [--options] -d domname file [file ...]\n"
               "  %s [--options] -a disk.img [-a disk.img ...] file [file ...]\n"
@@ -274,6 +274,9 @@ main (int argc, char *argv[])
   /* Add drives. */
   add_drives (drvs);
 
+  if (key_store_requires_network (ks) && guestfs_set_network (g, 1) == -1)
+    exit (EXIT_FAILURE);
+
   if (guestfs_launch (g) == -1)
     exit (EXIT_FAILURE);
 
index 740f2e8fe86dff9483e3e0c66cbf68691ffc4f3c..feb412adee61033bbfc0bc79792c21396e9b1ec4 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/bash -
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index 5ab653428c5841d56d79b87d912f29f8e0385549..0a779b915dbdddcb371de1bb3d7a0561b1564f49 100644 (file)
@@ -398,4 +398,4 @@ Richard W.M. Jones L<http://people.redhat.com/~rjones/>
 
 =head1 COPYRIGHT
 
-Copyright (C) 2009-2020 Red Hat Inc.
+Copyright (C) 2009-2023 Red Hat Inc.
index 5c25ab95e72fd37fe8b6d41c4a27f9d923604401..3aadc3949b5a523e05b54098a50bbb27aac29ee5 100644 (file)
@@ -32,7 +32,7 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -487,7 +487,6 @@ EGREP = @EGREP@
 ETAGS = @ETAGS@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FILECMD = @FILECMD@
 GCC_VISIBILITY_HIDDEN = @GCC_VISIBILITY_HIDDEN@
 GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
 GMSGFMT = @GMSGFMT@
@@ -516,6 +515,8 @@ LIBINTL = @LIBINTL@
 LIBLZMA_CFLAGS = @LIBLZMA_CFLAGS@
 LIBLZMA_LIBS = @LIBLZMA_LIBS@
 LIBOBJS = @LIBOBJS@
+LIBOSINFO_CFLAGS = @LIBOSINFO_CFLAGS@
+LIBOSINFO_LIBS = @LIBOSINFO_LIBS@
 LIBS = @LIBS@
 LIBTINFO_CFLAGS = @LIBTINFO_CFLAGS@
 LIBTINFO_LIBS = @LIBTINFO_LIBS@
@@ -586,6 +587,7 @@ PO4A_TRANSLATE = @PO4A_TRANSLATE@
 PODWRAPPER = @PODWRAPPER@
 POSUB = @POSUB@
 RANLIB = @RANLIB@
+REALPATH = @REALPATH@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
index 81975691987245f068871d89d966fd9808fad662..6c947d160a3e161f961fedfcbbe711273ea5d024 100644 (file)
@@ -32,7 +32,7 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -488,7 +488,6 @@ EGREP = @EGREP@
 ETAGS = @ETAGS@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FILECMD = @FILECMD@
 GCC_VISIBILITY_HIDDEN = @GCC_VISIBILITY_HIDDEN@
 GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
 GMSGFMT = @GMSGFMT@
@@ -517,6 +516,8 @@ LIBINTL = @LIBINTL@
 LIBLZMA_CFLAGS = @LIBLZMA_CFLAGS@
 LIBLZMA_LIBS = @LIBLZMA_LIBS@
 LIBOBJS = @LIBOBJS@
+LIBOSINFO_CFLAGS = @LIBOSINFO_CFLAGS@
+LIBOSINFO_LIBS = @LIBOSINFO_LIBS@
 LIBS = @LIBS@
 LIBTINFO_CFLAGS = @LIBTINFO_CFLAGS@
 LIBTINFO_LIBS = @LIBTINFO_LIBS@
@@ -587,6 +588,7 @@ PO4A_TRANSLATE = @PO4A_TRANSLATE@
 PODWRAPPER = @PODWRAPPER@
 POSUB = @POSUB@
 RANLIB = @RANLIB@
+REALPATH = @REALPATH@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
index e485cf4952da59cde11ac60180d053d129162776..349beac3dc7d6e5cb79933c50e13510e62538cb0 100644 (file)
@@ -1,5 +1,5 @@
 (* virt-get-kernel
- * Copyright (C) 2013-2020 Red Hat Inc.
+ * Copyright (C) 2013-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -41,7 +41,8 @@ let parse_cmdline () =
     let uri =
       try URI.parse_uri arg
       with URI.Parse_failed ->
-        error (f_"error parsing URI '%s'. Look for error messages printed above.") arg in
+        error (f_"error parsing URI '%s'. \
+                  Look for error messages printed above.") arg in
     file := Some uri
   and set_domain dom =
     if !domain <> None then
@@ -90,9 +91,11 @@ read the man page virt-get-kernel(1).
   let add =
     match file, domain with
     | None, None ->
-      error (f_"you must give either -a or -d options.  Read virt-get-kernel(1) man page for further information.")
+      error (f_"you must give either -a or -d options.  \
+                Read virt-get-kernel(1) man page for further information.")
     | Some _, Some _ ->
-      error (f_"you cannot give -a and -d options together.  Read virt-get-kernel(1) man page for further information.")
+      error (f_"you cannot give -a and -d options together.  \
+                Read virt-get-kernel(1) man page for further information.")
     | None, Some dom ->
       fun (g : Guestfs.guestfs) ->
         let readonlydisk = "ignore" (* ignore CDs, data drives *) in
@@ -176,6 +179,7 @@ let main () =
   (* Connect to libguestfs. *)
   let g = open_guestfs () in
   add g;
+  g#set_network (key_store_requires_network ks);
   g#launch ();
 
   (* Decrypt the disks. *)
index ba4d473a8ca55099144c20804ec41aac7e8bc7f4..4437e461c3aececf70eb4fe1beaeca92073eca83 100644 (file)
@@ -1,5 +1,5 @@
 (* virt-get-kernel
- * Copyright (C) 2013-2020 Red Hat Inc.
+ * Copyright (C) 2013-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index 0e3eba2fbc9fc7ac6061434abba5e01fb4a888b7..86ac2d4373eefd59db4f28b12a63d954adfbcbf0 100644 (file)
@@ -10,7 +10,7 @@ virt-get-kernel - Extract kernel and ramdisk from guests
 
 =head1 DESCRIPTION
 
-This option extracts the kernel and initramfs from a guest.
+This program extracts the kernel and initramfs from a guest.
 
 The format of the disk image is automatically detected unless you
 specify it by using the I<--format> option.
@@ -204,6 +204,7 @@ L<guestfs(3)>,
 L<guestfish(1)>,
 L<guestmount(1)>,
 L<virt-copy-out(1)>,
+L<virt-drivers(1)>,
 L<http://libguestfs.org/>.
 
 =head1 AUTHOR
@@ -212,4 +213,4 @@ Richard W.M. Jones L<http://people.redhat.com/~rjones/>
 
 =head1 COPYRIGHT
 
-Copyright (C) 2013-2020 Red Hat Inc.
+Copyright (C) 2013-2023 Red Hat Inc.
index 3f5c47a1ebf325bca1a2f2b092d717b1b82fc4ab..fffc0a00454fd146b872b9de0482c64c7508b1f1 100644 (file)
@@ -1,5 +1,5 @@
 # libguestfs
-# Copyright (C) 2017-2021 Red Hat Inc.
+# Copyright (C) 2017-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -27,6 +27,8 @@ libgnu_la_SOURCES = \
        argmatch.h \
        bitrotate.h \
        c-ctype.h \
+       error.c \
+       error.h \
        getprogname.h \
        hash.c \
        hash.h \
index 0b7bfb494f9bec1b48ea7e67c678aa98bcd6f83c..8b7893ecdc6a6a18077e4dfa095a5b4cf0d9e12d 100644 (file)
@@ -15,7 +15,7 @@
 @SET_MAKE@
 
 # libguestfs
-# Copyright (C) 2017-2021 Red Hat Inc.
+# Copyright (C) 2017-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -36,7 +36,7 @@
 # probably being moved to common/utils.
 
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -171,8 +171,8 @@ CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
 LTLIBRARIES = $(noinst_LTLIBRARIES)
 libgnu_la_LIBADD =
-am_libgnu_la_OBJECTS = argmatch.lo hash.lo human.lo xstrtol.lo \
-       xstrtoul.lo xstrtoull.lo xstrtoumax.lo
+am_libgnu_la_OBJECTS = argmatch.lo error.lo hash.lo human.lo \
+       xstrtol.lo xstrtoul.lo xstrtoull.lo xstrtoumax.lo
 libgnu_la_OBJECTS = $(am_libgnu_la_OBJECTS)
 AM_V_lt = $(am__v_lt_@AM_V@)
 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
@@ -193,10 +193,10 @@ am__v_at_1 =
 DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
 depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
 am__maybe_remake_depfiles = depfiles
-am__depfiles_remade = ./$(DEPDIR)/argmatch.Plo ./$(DEPDIR)/hash.Plo \
-       ./$(DEPDIR)/human.Plo ./$(DEPDIR)/xstrtol.Plo \
-       ./$(DEPDIR)/xstrtoul.Plo ./$(DEPDIR)/xstrtoull.Plo \
-       ./$(DEPDIR)/xstrtoumax.Plo
+am__depfiles_remade = ./$(DEPDIR)/argmatch.Plo ./$(DEPDIR)/error.Plo \
+       ./$(DEPDIR)/hash.Plo ./$(DEPDIR)/human.Plo \
+       ./$(DEPDIR)/xstrtol.Plo ./$(DEPDIR)/xstrtoul.Plo \
+       ./$(DEPDIR)/xstrtoull.Plo ./$(DEPDIR)/xstrtoumax.Plo
 am__mv = mv -f
 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
        $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
@@ -275,7 +275,6 @@ EGREP = @EGREP@
 ETAGS = @ETAGS@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FILECMD = @FILECMD@
 GCC_VISIBILITY_HIDDEN = @GCC_VISIBILITY_HIDDEN@
 GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
 GMSGFMT = @GMSGFMT@
@@ -304,6 +303,8 @@ LIBINTL = @LIBINTL@
 LIBLZMA_CFLAGS = @LIBLZMA_CFLAGS@
 LIBLZMA_LIBS = @LIBLZMA_LIBS@
 LIBOBJS = @LIBOBJS@
+LIBOSINFO_CFLAGS = @LIBOSINFO_CFLAGS@
+LIBOSINFO_LIBS = @LIBOSINFO_LIBS@
 LIBS = @LIBS@
 LIBTINFO_CFLAGS = @LIBTINFO_CFLAGS@
 LIBTINFO_LIBS = @LIBTINFO_LIBS@
@@ -374,6 +375,7 @@ PO4A_TRANSLATE = @PO4A_TRANSLATE@
 PODWRAPPER = @PODWRAPPER@
 POSUB = @POSUB@
 RANLIB = @RANLIB@
+REALPATH = @REALPATH@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
@@ -520,6 +522,8 @@ libgnu_la_SOURCES = \
        argmatch.h \
        bitrotate.h \
        c-ctype.h \
+       error.c \
+       error.h \
        getprogname.h \
        hash.c \
        hash.h \
@@ -593,6 +597,7 @@ distclean-compile:
        -rm -f *.tab.c
 
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argmatch.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/error.Plo@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hash.Plo@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/human.Plo@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xstrtol.Plo@am__quote@ # am--include-marker
@@ -763,6 +768,7 @@ clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
 
 distclean: distclean-am
                -rm -f ./$(DEPDIR)/argmatch.Plo
+       -rm -f ./$(DEPDIR)/error.Plo
        -rm -f ./$(DEPDIR)/hash.Plo
        -rm -f ./$(DEPDIR)/human.Plo
        -rm -f ./$(DEPDIR)/xstrtol.Plo
@@ -815,6 +821,7 @@ installcheck-am:
 
 maintainer-clean: maintainer-clean-am
                -rm -f ./$(DEPDIR)/argmatch.Plo
+       -rm -f ./$(DEPDIR)/error.Plo
        -rm -f ./$(DEPDIR)/hash.Plo
        -rm -f ./$(DEPDIR)/human.Plo
        -rm -f ./$(DEPDIR)/xstrtol.Plo
index a2d9efe6221fa223936fe22c09165d365a32db0c..85c93543a5e1aff0093a33d6d0db41292c9c3b44 100644 (file)
@@ -1,6 +1,6 @@
 /* argmatch.c -- find a match for a string in an array
 
-   Copyright (C) 1990, 1998-1999, 2001-2007, 2009-2021 Free Software
+   Copyright (C) 1990, 1998-1999, 2001-2007, 2009-2023 Free Software
    Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
index ba30939063d1768f9eb1133affc4ba8a6e802b21..fa5db8206a3dacc7e580533a434de96c5ab115fe 100644 (file)
@@ -1,6 +1,6 @@
 /* argmatch.h -- definitions and prototypes for argmatch.c
 
-   Copyright (C) 1990, 1998-1999, 2001-2002, 2004-2005, 2009-2021 Free Software
+   Copyright (C) 1990, 1998-1999, 2001-2002, 2004-2005, 2009-2023 Free Software
    Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
index a0dbc70e0cd7ca490d29e094f6f56423ca4d3bd7..43292d58d298c62eae242503e28c3dde003797a6 100755 (executable)
@@ -1,5 +1,5 @@
 /* bitrotate.h - Rotate bits in integers
-   Copyright (C) 2008-2021 Free Software Foundation, Inc.
+   Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
    (NB: I modified the original GPL boilerplate here to LGPLv2+.  This
    is because of the weird way that gnulib uses licenses, where the
index 6c2030ae100ac03ff652176f4c211ef9637c0ab1..b0427f6216a402ddff257d9e8dc20dec8f7da982 100644 (file)
@@ -5,7 +5,7 @@
    <ctype.h> functions' behaviour depends on the current locale set via
    setlocale.
 
-   Copyright (C) 2000-2003, 2006, 2008-2021 Free Software Foundation, Inc.
+   Copyright (C) 2000-2003, 2006, 2008-2023 Free Software Foundation, Inc.
 
    (NB: I modified the original GPL boilerplate here to LGPLv2+.  This
    is because of the weird way that gnulib uses licenses, where the
diff --git a/gnulib/lib/error.c b/gnulib/lib/error.c
new file mode 100644 (file)
index 0000000..6fb4fd8
--- /dev/null
@@ -0,0 +1,356 @@
+/* Error handler for noninteractive utilities
+   Copyright (C) 1990-1998, 2000-2007, 2009-2023 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   This file is free software: you can redistribute it and/or modify
+   it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   This file is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
+
+/* Written by David MacKenzie <djm@gnu.ai.mit.edu>.  */
+
+#include <config.h>
+
+#ifndef HAVE_ERROR_H
+
+#include "error.h"
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "getprogname.h"
+
+#ifndef _
+# define _(String) String
+#endif
+
+/* If NULL, error will flush stdout, then print on stderr the program
+   name, a colon and a space.  Otherwise, error will call this
+   function without parameters instead.  */
+void (*error_print_progname) (void);
+
+/* This variable is incremented each time 'error' is called.  */
+unsigned int error_message_count;
+
+#include <fcntl.h>
+#include <unistd.h>
+
+#if defined _WIN32 && ! defined __CYGWIN__
+/* Get declarations of the native Windows API functions.  */
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+/* Get _get_osfhandle.  */
+# if GNULIB_MSVC_NOTHROW
+#  include "msvc-nothrow.h"
+# else
+#  include <io.h>
+# endif
+#endif
+
+/* The gnulib override of fcntl is not needed in this file.  */
+# undef fcntl
+
+# if !(GNULIB_STRERROR_R_POSIX || HAVE_DECL_STRERROR_R)
+#  ifndef HAVE_DECL_STRERROR_R
+"this configure-time declaration test was not run"
+#  endif
+#  if STRERROR_R_CHAR_P
+char *strerror_r (int errnum, char *buf, size_t buflen);
+#  else
+int strerror_r (int errnum, char *buf, size_t buflen);
+#  endif
+# endif
+
+# define program_name getprogname ()
+
+#if GNULIB_STRERROR_R_POSIX || HAVE_STRERROR_R || defined strerror_r
+# define __strerror_r strerror_r
+#endif /* GNULIB_STRERROR_R_POSIX || HAVE_STRERROR_R || defined strerror_r */
+
+#if !_LIBC
+/* Return non-zero if FD is open.  */
+static int
+is_open (int fd)
+{
+# if defined _WIN32 && ! defined __CYGWIN__
+  /* On native Windows: The initial state of unassigned standard file
+     descriptors is that they are open but point to an INVALID_HANDLE_VALUE.
+     There is no fcntl, and the gnulib replacement fcntl does not support
+     F_GETFL.  */
+  return (HANDLE) _get_osfhandle (fd) != INVALID_HANDLE_VALUE;
+# else
+#  ifndef F_GETFL
+#   error Please port fcntl to your platform
+#  endif
+  return 0 <= fcntl (fd, F_GETFL);
+# endif
+}
+#endif
+
+static void
+flush_stdout (void)
+{
+#if !_LIBC
+  int stdout_fd;
+
+# if GNULIB_FREOPEN_SAFER
+  /* Use of gnulib's freopen-safer module normally ensures that
+       fileno (stdout) == 1
+     whenever stdout is open.  */
+  stdout_fd = STDOUT_FILENO;
+# else
+  /* POSIX states that fileno (stdout) after fclose is unspecified.  But in
+     practice it is not a problem, because stdout is statically allocated and
+     the fd of a FILE stream is stored as a field in its allocated memory.  */
+  stdout_fd = fileno (stdout);
+# endif
+  /* POSIX states that fflush (stdout) after fclose is unspecified; it
+     is safe in glibc, but not on all other platforms.  fflush (NULL)
+     is always defined, but too draconian.  */
+  if (0 <= stdout_fd && is_open (stdout_fd))
+#endif
+    fflush (stdout);
+}
+
+static void
+print_errno_message (int errnum)
+{
+  char const *s;
+
+#if _LIBC || GNULIB_STRERROR_R_POSIX || defined HAVE_STRERROR_R
+  char errbuf[1024];
+# if _LIBC || (!GNULIB_STRERROR_R_POSIX && STRERROR_R_CHAR_P)
+  s = __strerror_r (errnum, errbuf, sizeof errbuf);
+# else
+  if (__strerror_r (errnum, errbuf, sizeof errbuf) == 0)
+    s = errbuf;
+  else
+    s = 0;
+# endif
+#else
+  s = strerror (errnum);
+#endif
+
+#if !_LIBC
+  if (! s)
+    s = _("Unknown system error");
+#endif
+
+#if _LIBC
+  __fxprintf (NULL, ": %s", s);
+#else
+  fprintf (stderr, ": %s", s);
+#endif
+}
+
+static void
+error_tail (int status, int errnum, const char *message, va_list args)
+{
+#if _LIBC
+  if (_IO_fwide (stderr, 0) > 0)
+    {
+      size_t len = strlen (message) + 1;
+      wchar_t *wmessage = NULL;
+      mbstate_t st;
+      size_t res;
+      const char *tmp;
+      bool use_malloc = false;
+
+      while (1)
+        {
+          if (__libc_use_alloca (len * sizeof (wchar_t)))
+            wmessage = (wchar_t *) alloca (len * sizeof (wchar_t));
+          else
+            {
+              if (!use_malloc)
+                wmessage = NULL;
+
+              wchar_t *p = (wchar_t *) realloc (wmessage,
+                                                len * sizeof (wchar_t));
+              if (p == NULL)
+                {
+                  free (wmessage);
+                  fputws_unlocked (L"out of memory\n", stderr);
+                  return;
+                }
+              wmessage = p;
+              use_malloc = true;
+            }
+
+          memset (&st, '\0', sizeof (st));
+          tmp = message;
+
+          res = mbsrtowcs (wmessage, &tmp, len, &st);
+          if (res != len)
+            break;
+
+          if (__builtin_expect (len >= SIZE_MAX / sizeof (wchar_t) / 2, 0))
+            {
+              /* This really should not happen if everything is fine.  */
+              res = (size_t) -1;
+              break;
+            }
+
+          len *= 2;
+        }
+
+      if (res == (size_t) -1)
+        {
+          /* The string cannot be converted.  */
+          if (use_malloc)
+            {
+              free (wmessage);
+              use_malloc = false;
+            }
+          wmessage = (wchar_t *) L"???";
+        }
+
+      __vfwprintf (stderr, wmessage, args);
+
+      if (use_malloc)
+        free (wmessage);
+    }
+  else
+#endif
+    vfprintf (stderr, message, args);
+
+  ++error_message_count;
+  if (errnum)
+    print_errno_message (errnum);
+#if _LIBC
+  __fxprintf (NULL, "\n");
+#else
+  putc ('\n', stderr);
+#endif
+  fflush (stderr);
+  if (status)
+    exit (status);
+}
+
+
+/* Print the program name and error message MESSAGE, which is a printf-style
+   format string with optional args.
+   If ERRNUM is nonzero, print its corresponding system error message.
+   Exit with status STATUS if it is nonzero.  */
+void
+error (int status, int errnum, const char *message, ...)
+{
+  va_list args;
+
+#if defined _LIBC && defined __libc_ptf_call
+  /* We do not want this call to be cut short by a thread
+     cancellation.  Therefore disable cancellation for now.  */
+  int state = PTHREAD_CANCEL_ENABLE;
+  __libc_ptf_call (pthread_setcancelstate, (PTHREAD_CANCEL_DISABLE, &state),
+                   0);
+#endif
+
+  flush_stdout ();
+#ifdef _LIBC
+  _IO_flockfile (stderr);
+#endif
+  if (error_print_progname)
+    (*error_print_progname) ();
+  else
+    {
+#if _LIBC
+      __fxprintf (NULL, "%s: ", program_name);
+#else
+      fprintf (stderr, "%s: ", program_name);
+#endif
+    }
+
+  va_start (args, message);
+  error_tail (status, errnum, message, args);
+  va_end (args);
+
+#ifdef _LIBC
+  _IO_funlockfile (stderr);
+# ifdef __libc_ptf_call
+  __libc_ptf_call (pthread_setcancelstate, (state, NULL), 0);
+# endif
+#endif
+}
+\f
+/* Sometimes we want to have at most one error per line.  This
+   variable controls whether this mode is selected or not.  */
+int error_one_per_line;
+
+void
+error_at_line (int status, int errnum, const char *file_name,
+               unsigned int line_number, const char *message, ...)
+{
+  va_list args;
+
+  if (error_one_per_line)
+    {
+      static const char *old_file_name;
+      static unsigned int old_line_number;
+
+      if (old_line_number == line_number
+          && (file_name == old_file_name
+              || (old_file_name != NULL
+                  && file_name != NULL
+                  && strcmp (old_file_name, file_name) == 0)))
+
+        /* Simply return and print nothing.  */
+        return;
+
+      old_file_name = file_name;
+      old_line_number = line_number;
+    }
+
+#if defined _LIBC && defined __libc_ptf_call
+  /* We do not want this call to be cut short by a thread
+     cancellation.  Therefore disable cancellation for now.  */
+  int state = PTHREAD_CANCEL_ENABLE;
+  __libc_ptf_call (pthread_setcancelstate, (PTHREAD_CANCEL_DISABLE, &state),
+                   0);
+#endif
+
+  flush_stdout ();
+#ifdef _LIBC
+  _IO_flockfile (stderr);
+#endif
+  if (error_print_progname)
+    (*error_print_progname) ();
+  else
+    {
+#if _LIBC
+      __fxprintf (NULL, "%s:", program_name);
+#else
+      fprintf (stderr, "%s:", program_name);
+#endif
+    }
+
+#if _LIBC
+  __fxprintf (NULL, file_name != NULL ? "%s:%u: " : " ",
+              file_name, line_number);
+#else
+  fprintf (stderr, file_name != NULL ? "%s:%u: " : " ",
+           file_name, line_number);
+#endif
+
+  va_start (args, message);
+  error_tail (status, errnum, message, args);
+  va_end (args);
+
+#ifdef _LIBC
+  _IO_funlockfile (stderr);
+# ifdef __libc_ptf_call
+  __libc_ptf_call (pthread_setcancelstate, (state, NULL), 0);
+# endif
+#endif
+}
+
+#endif /* !HAVE_ERROR_H */
diff --git a/gnulib/lib/error.h b/gnulib/lib/error.h
new file mode 100644 (file)
index 0000000..87e3bf5
--- /dev/null
@@ -0,0 +1,53 @@
+/* Declaration for error-reporting function
+   Copyright (C) 1995-1997, 2003, 2006, 2008-2023 Free Software Foundation,
+   Inc.
+   This file is part of the GNU C Library.
+
+   This file is free software: you can redistribute it and/or modify
+   it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   This file is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public License
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
+
+#ifndef _ERROR_H
+#define _ERROR_H 1
+
+#include <stdio.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Print a message with 'fprintf (stderr, FORMAT, ...)';
+   if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM).
+   If STATUS is nonzero, terminate the program with 'exit (STATUS)'.  */
+
+extern void error (int __status, int __errnum, const char *__format, ...);
+
+extern void error_at_line (int __status, int __errnum, const char *__fname,
+                           unsigned int __lineno, const char *__format, ...);
+
+/* If NULL, error will flush stdout, then print on stderr the program
+   name, a colon and a space.  Otherwise, error will call this
+   function without parameters instead.  */
+extern void (*error_print_progname) (void);
+
+/* This variable is incremented each time 'error' is called.  */
+extern unsigned int error_message_count;
+
+/* Sometimes we want to have at most one error per line.  This
+   variable controls whether this mode is selected or not.  */
+extern int error_one_per_line;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* error.h */
index 68a4cb2d40d46c80f910df692e72b18b6c10d06e..e0c7b63bf197057a477957bf66746b2ddd1e4e14 100644 (file)
@@ -1,5 +1,5 @@
 /* libguestfs
- * Copyright (C) 2013-2020 Red Hat Inc.
+ * Copyright (C) 2013-2023 Red Hat Inc.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -19,6 +19,8 @@
 #ifndef GUESTFS_GETPROGNAME
 #define GUESTFS_GETPROGNAME
 
+#ifndef HAVE_GETPROGNAME
+
 #include <errno.h>
 
 static inline char const *
@@ -27,4 +29,6 @@ getprogname (void)
   return program_invocation_short_name;
 }
 
+#endif
+
 #endif /* GUESTFS_GETPROGNAME */
index f6c7518eacca02b9cbe614af639771d258607753..96a440176e7e8fb1f36d1107e4cd4ace9b6921c2 100755 (executable)
@@ -1,6 +1,6 @@
 /* hash - hashing table processing.
 
-   Copyright (C) 1998-2004, 2006-2007, 2009-2021 Free Software Foundation, Inc.
+   Copyright (C) 1998-2004, 2006-2007, 2009-2023 Free Software Foundation, Inc.
 
    Written by Jim Meyering, 1992.
 
index 8db7c348720a586cb6a14d0b83e7edd6a8c72f50..9c7d43b8c5ab37102cb74916640b3dc57e10e7c7 100755 (executable)
@@ -1,5 +1,5 @@
 /* hash - hashing table processing.
-   Copyright (C) 1998-1999, 2001, 2003, 2009-2021 Free Software Foundation,
+   Copyright (C) 1998-1999, 2001, 2003, 2009-2023 Free Software Foundation,
    Inc.
    Written by Jim Meyering <meyering@ascend.com>, 1998.
 
index 22545de776a52c71503f5a9f32fc848da9774468..9f4f28eef294886b21c5b64020d32842db9f0dee 100644 (file)
@@ -1,6 +1,6 @@
 /* human.c -- print human readable file size
 
-   Copyright (C) 1996-2007, 2009-2021 Free Software Foundation, Inc.
+   Copyright (C) 1996-2007, 2009-2023 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
index 61f110fc0215205039ec9729ab34e68686c2d102..c206cb51d3dc244048bee17e210a78e6f353ded1 100644 (file)
@@ -1,6 +1,6 @@
 /* human.h -- print human readable file size
 
-   Copyright (C) 1996-2007, 2009-2021 Free Software Foundation, Inc.
+   Copyright (C) 1996-2007, 2009-2023 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
index dac2d1a23be4b91dcf045ff7abe07a5e2011734d..5fced39a725edeac806185049fb8b7527c6c6182 100755 (executable)
@@ -1,6 +1,6 @@
 /* ignore a function return without a compiler warning.  -*- coding: utf-8 -*-
 
-   Copyright (C) 2008-2021 Free Software Foundation, Inc.
+   Copyright (C) 2008-2023 Free Software Foundation, Inc.
 
    (NB: I modified the original GPL boilerplate here to LGPLv2+.  This
    is because of the weird way that gnulib uses licenses, where the
index 1e6acce847dee53f22fba37e0cb8552f8c608a86..78fc0d9f49f224549cce751cb44a41eb306754df 100755 (executable)
@@ -1,6 +1,6 @@
 /* xalloc-oversized.h -- memory allocation size checking
 
-   Copyright (C) 1990-2000, 2003-2004, 2006-2021 Free Software Foundation, Inc.
+   Copyright (C) 1990-2000, 2003-2004, 2006-2023 Free Software Foundation, Inc.
 
    (NB: I modified the original GPL boilerplate here to LGPLv2+.  This
    is because of the weird way that gnulib uses licenses, where the
index ee2f2caee238f8c754d6275cafe8abe4487e782a..527e6f84af622be9ed72ce4968045fbfddaa5f1e 100644 (file)
@@ -1,6 +1,6 @@
 /* A more useful interface to strtol.
 
-   Copyright (C) 1995-1996, 1998-2001, 2003-2007, 2009-2021 Free Software
+   Copyright (C) 1995-1996, 1998-2001, 2003-2007, 2009-2023 Free Software
    Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
index b873033f48d0b5c60edb368376df90b39b44c9dc..56da1a80b745e08c3fb97ad82fca3cd337cac361 100644 (file)
@@ -1,6 +1,6 @@
 /* A more useful interface to strtol.
 
-   Copyright (C) 1995-1996, 1998-1999, 2001-2004, 2006-2021 Free Software
+   Copyright (C) 1995-1996, 1998-1999, 2001-2004, 2006-2023 Free Software
    Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
index 297887bae3a4345f2544d851fd586b9d276da3c9..8f4abbdeb60e3f1e35ea3c4a588594de92acfebe 100644 (file)
@@ -1,5 +1,5 @@
 # libguestfs virt-inspector
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index ecce8ad1167099ee2e320df9e0b1e312fd754174..c341e127c0beeb59c59a9c427dab53e1cb36a121 100644 (file)
@@ -15,7 +15,7 @@
 @SET_MAKE@
 
 # libguestfs virt-inspector
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -32,7 +32,7 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -492,7 +492,6 @@ EGREP = @EGREP@
 ETAGS = @ETAGS@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FILECMD = @FILECMD@
 GCC_VISIBILITY_HIDDEN = @GCC_VISIBILITY_HIDDEN@
 GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
 GMSGFMT = @GMSGFMT@
@@ -521,6 +520,8 @@ LIBINTL = @LIBINTL@
 LIBLZMA_CFLAGS = @LIBLZMA_CFLAGS@
 LIBLZMA_LIBS = @LIBLZMA_LIBS@
 LIBOBJS = @LIBOBJS@
+LIBOSINFO_CFLAGS = @LIBOSINFO_CFLAGS@
+LIBOSINFO_LIBS = @LIBOSINFO_LIBS@
 LIBS = @LIBS@
 LIBTINFO_CFLAGS = @LIBTINFO_CFLAGS@
 LIBTINFO_LIBS = @LIBTINFO_LIBS@
@@ -591,6 +592,7 @@ PO4A_TRANSLATE = @PO4A_TRANSLATE@
 PODWRAPPER = @PODWRAPPER@
 POSUB = @POSUB@
 RANLIB = @RANLIB@
+REALPATH = @REALPATH@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
index 0cdfba6e65e49c28b30f30d4c927f9d2e2861b99..2461bcfb451445b911d8c02f7be85ab65d9037a6 100644 (file)
@@ -8,6 +8,7 @@
     <major_version>899</major_version>
     <minor_version>13</minor_version>
     <hostname>coreos.invalid</hostname>
+    <build_id>2016-03-23-0120</build_id>
     <osinfo>coreos899.13</osinfo>
     <mountpoints>
       <mountpoint dev="/dev/sda5">/</mountpoint>
index 6e21591d80660e557388b60d812d2e973893935b..4fb85467f404bf259d0e3ac48b982752a2e0230c 100644 (file)
       </filesystem>
     </filesystems>
     <applications>
+      <application>
+        <name>alternatives</name>
+        <version>1.19</version>
+        <release>2.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/fedora-sysv/chkconfig</url>
+        <summary>A tool to maintain symbolic links determining default commands</summary>
+        <description>alternatives creates, removes, maintains and displays information about the
+symbolic links comprising the alternatives system. It is possible for several
+programs fulfilling the same or similar functions to be installed on a single
+system at the same time.</description>
+      </application>
+      <application>
+        <name>audit-libs</name>
+        <version>3.0.8</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://people.redhat.com/sgrubb/audit/</url>
+        <summary>Dynamic library for libaudit</summary>
+        <description>The audit-libs package contains the dynamic libraries needed for
+applications to use the audit framework.</description>
+      </application>
+      <application>
+        <name>authselect</name>
+        <version>1.4.0</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/authselect/authselect</url>
+        <summary>Configures authentication and identity sources from supported profiles</summary>
+        <description>Authselect is designed to be a replacement for authconfig but it takes
+a different approach to configure the system. Instead of letting
+the administrator build the PAM stack with a tool (which may potentially
+end up with a broken configuration), it would ship several tested stacks
+(profiles) that solve a use-case and are well tested and supported.
+At the same time, some obsolete features of authconfig are not
+supported by authselect.</description>
+      </application>
+      <application>
+        <name>authselect-libs</name>
+        <version>1.4.0</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/authselect/authselect</url>
+        <summary>Utility library used by the authselect tool</summary>
+        <description>Common library files for authselect. This package is used by the authselect
+command line tool and any other potential front-ends.</description>
+      </application>
       <application>
         <name>basesystem</name>
         <version>11</version>
-        <release>10.fc33</release>
+        <release>13.fc36</release>
         <arch>noarch</arch>
         <url>(none)</url>
         <summary>The skeleton package which defines a simple Fedora system</summary>
@@ -43,8 +90,8 @@ should never be removed.</description>
       </application>
       <application>
         <name>bash</name>
-        <version>5.0.17</version>
-        <release>2.fc33</release>
+        <version>5.1.16</version>
+        <release>2.fc36</release>
         <arch>x86_64</arch>
         <url>https://www.gnu.org/software/bash</url>
         <summary>The GNU Bourne Again shell</summary>
@@ -52,11 +99,307 @@ should never be removed.</description>
 interpreter that is compatible with the Bourne shell (sh). Bash
 incorporates useful features from the Korn shell (ksh) and the C shell
 (csh). Most sh scripts can be run by bash without modification.</description>
+      </application>
+      <application>
+        <name>bzip2-libs</name>
+        <version>1.0.8</version>
+        <release>11.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://www.bzip.org/</url>
+        <summary>Libraries for applications using bzip2</summary>
+        <description>Libraries for applications using the bzip2 compression format.</description>
+      </application>
+      <application>
+        <name>ca-certificates</name>
+        <version>2021.2.52</version>
+        <release>3.fc36</release>
+        <arch>noarch</arch>
+        <url>https://fedoraproject.org/wiki/CA-Certificates</url>
+        <summary>The Mozilla CA root certificate bundle</summary>
+        <description>This package contains the set of CA certificates chosen by the
+Mozilla Foundation for use with the Internet PKI.</description>
+      </application>
+      <application>
+        <name>coreutils</name>
+        <version>9.1</version>
+        <release>2.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.gnu.org/software/coreutils/</url>
+        <summary>A set of basic GNU tools commonly used in shell scripts</summary>
+        <description>These are the GNU core utilities.  This package is the combination of
+the old GNU fileutils, sh-utils, and textutils packages.</description>
+      </application>
+      <application>
+        <name>coreutils-common</name>
+        <version>9.1</version>
+        <release>2.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.gnu.org/software/coreutils/</url>
+        <summary>coreutils common optional components</summary>
+        <description>Optional though recommended components,
+including documentation and translations.</description>
+      </application>
+      <application>
+        <name>cpio</name>
+        <version>2.13</version>
+        <release>12.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://www.gnu.org/software/cpio/</url>
+        <summary>A GNU archiving program</summary>
+        <description>GNU cpio copies files into or out of a cpio or tar archive.  Archives
+are files which contain a collection of other files plus information
+about them, such as their file name, owner, timestamps, and access
+permissions.  The archive can be another file on the disk, a magnetic
+tape, or a pipe.  GNU cpio supports the following archive formats:  binary,
+old ASCII, new ASCII, crc, HPUX binary, HPUX old ASCII, old tar and POSIX.1
+tar.  By default, cpio creates binary format archives, so that they are
+compatible with older cpio programs.  When it is extracting files from
+archives, cpio automatically recognizes which kind of archive it is reading
+and can read archives created on machines with a different byte-order.
+
+Install cpio if you need a program to manage file archives.</description>
+      </application>
+      <application>
+        <name>cracklib</name>
+        <version>2.9.6</version>
+        <release>28.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://sourceforge.net/projects/cracklib/</url>
+        <summary>A password-checking library</summary>
+        <description>CrackLib tests passwords to determine whether they match certain
+security-oriented characteristics, with the purpose of stopping users
+from choosing passwords that are easy to guess. CrackLib performs
+several tests on passwords: it tries to generate words from a username
+and gecos entry and checks those words against the password; it checks
+for simplistic patterns in passwords; and it checks for the password
+in a dictionary.
+
+CrackLib is actually a library containing a particular C function
+which is used to check the password, as well as other C
+functions. CrackLib is not a replacement for a passwd program; it must
+be used in conjunction with an existing passwd program.
+
+Install the cracklib package if you need a program to check users'
+passwords to see if they are at least minimally secure. If you install
+CrackLib, you will also want to install the cracklib-dicts package.</description>
+      </application>
+      <application>
+        <name>crypto-policies</name>
+        <version>20220428</version>
+        <release>1.gitdfb10ea.fc37</release>
+        <arch>noarch</arch>
+        <url>https://gitlab.com/redhat-crypto/fedora-crypto-policies</url>
+        <summary>System-wide crypto policies</summary>
+        <description>This package provides pre-built configuration files with
+cryptographic policies for various cryptographic back-ends,
+such as SSL/TLS libraries.</description>
+      </application>
+      <application>
+        <name>crypto-policies-scripts</name>
+        <version>20220428</version>
+        <release>1.gitdfb10ea.fc37</release>
+        <arch>noarch</arch>
+        <url>https://gitlab.com/redhat-crypto/fedora-crypto-policies</url>
+        <summary>Tool to switch between crypto policies</summary>
+        <description>This package provides a tool update-crypto-policies, which applies
+the policies provided by the crypto-policies package. These can be
+either the pre-built policies from the base package or custom policies
+defined in simple policy definition files.
+
+The package also provides a tool fips-mode-setup, which can be used
+to enable or disable the system FIPS mode.</description>
+      </application>
+      <application>
+        <name>cryptsetup-libs</name>
+        <version>2.4.3</version>
+        <release>2.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://gitlab.com/cryptsetup/cryptsetup</url>
+        <summary>Cryptsetup shared library</summary>
+        <description>This package contains the cryptsetup shared library, libcryptsetup.</description>
+      </application>
+      <application>
+        <name>curl</name>
+        <version>7.83.1</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://curl.se/</url>
+        <summary>A utility for getting files from remote servers (FTP, HTTP, and others)</summary>
+        <description>curl is a command line tool for transferring data with URL syntax, supporting
+FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, LDAP, LDAPS, FILE, IMAP,
+SMTP, POP3 and RTSP.  curl supports SSL certificates, HTTP POST, HTTP PUT, FTP
+uploading, HTTP form based upload, proxies, cookies, user+password
+authentication (Basic, Digest, NTLM, Negotiate, kerberos...), file transfer
+resume, proxy tunneling and a busload of other useful tricks.</description>
+      </application>
+      <application>
+        <name>cyrus-sasl-lib</name>
+        <version>2.1.28</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.cyrusimap.org/sasl/</url>
+        <summary>Shared libraries needed by applications which use Cyrus SASL</summary>
+        <description>The cyrus-sasl-lib package contains shared libraries which are needed by
+applications which use the Cyrus SASL library.</description>
+      </application>
+      <application>
+        <name>dbus</name>
+        <epoch>1</epoch>
+        <version>1.14.0</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.freedesktop.org/wiki/Software/dbus/</url>
+        <summary>D-BUS message bus</summary>
+        <description>D-BUS is a system for sending messages between applications. It is
+used both for the system-wide message bus service, and as a
+per-user-login-session messaging facility.</description>
+      </application>
+      <application>
+        <name>dbus-broker</name>
+        <version>31</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/bus1/dbus-broker</url>
+        <summary>Linux D-Bus Message Broker</summary>
+        <description>dbus-broker is an implementation of a message bus as defined by the D-Bus
+specification. Its aim is to provide high performance and reliability, while
+keeping compatibility to the D-Bus reference implementation. It is exclusively
+written for Linux systems, and makes use of many modern features provided by
+recent Linux kernel releases.</description>
+      </application>
+      <application>
+        <name>dbus-common</name>
+        <epoch>1</epoch>
+        <version>1.14.0</version>
+        <release>1.fc37</release>
+        <arch>noarch</arch>
+        <url>https://www.freedesktop.org/wiki/Software/dbus/</url>
+        <summary>D-BUS message bus configuration</summary>
+        <description>The dbus-common package provides the configuration and setup files for D-Bus
+implementations to provide a System and User Message Bus.</description>
+      </application>
+      <application>
+        <name>device-mapper</name>
+        <version>1.02.175</version>
+        <release>7.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://www.sourceware.org/dm/</url>
+        <summary>Device mapper utility</summary>
+        <description>This package contains the supporting userspace utility, dmsetup,
+for the kernel device-mapper.</description>
+      </application>
+      <application>
+        <name>device-mapper-libs</name>
+        <version>1.02.175</version>
+        <release>7.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://sourceware.org/lvm2/</url>
+        <summary>Device-mapper shared library</summary>
+        <description>This package contains the device-mapper shared library, libdevmapper.</description>
+      </application>
+      <application>
+        <name>diffutils</name>
+        <version>3.8</version>
+        <release>2.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://www.gnu.org/software/diffutils/diffutils.html</url>
+        <summary>GNU collection of diff utilities</summary>
+        <description>Diffutils includes four utilities: diff, cmp, diff3 and sdiff. Diff
+compares two files and shows the differences, line by line.  The cmp
+command shows the offset and line numbers where two files differ, or
+cmp can show the characters that differ between the two files.  The
+diff3 command shows the differences between three files.  Diff3 can be
+used when two people have made independent changes to a common
+original; diff3 can produce a merged file that contains both sets of
+changes and warnings about conflicts.  The sdiff command can be used
+to merge two files interactively.
+
+Install diffutils if you need to compare text files.</description>
+      </application>
+      <application>
+        <name>dracut</name>
+        <version>056</version>
+        <release>2.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://dracut.wiki.kernel.org/</url>
+        <summary>Initramfs generator using udev</summary>
+        <description>dracut contains tools to create bootable initramfses for the Linux
+kernel. Unlike other implementations, dracut hard-codes as little
+as possible into the initramfs. dracut contains various modules which
+are driven by the event-based udev. Having root on MD, DM, LVM2, LUKS
+is supported as well as NFS, iSCSI, NBD, FCoE with the dracut-network
+package.</description>
+      </application>
+      <application>
+        <name>elfutils-debuginfod-client</name>
+        <version>0.187</version>
+        <release>4.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://elfutils.org/</url>
+        <summary>Library and command line client for build-id HTTP ELF/DWARF server</summary>
+        <description>The elfutils-debuginfod-client package contains shared libraries
+dynamically loaded from -ldw, which use a debuginfod service
+to look up debuginfo and associated data. Also includes a
+command-line frontend.</description>
+      </application>
+      <application>
+        <name>elfutils-default-yama-scope</name>
+        <version>0.187</version>
+        <release>4.fc37</release>
+        <arch>noarch</arch>
+        <url>http://elfutils.org/</url>
+        <summary>Default yama attach scope sysctl setting</summary>
+        <description>Yama sysctl setting to enable default attach scope settings
+enabling programs to use ptrace attach, access to
+/proc/PID/{mem,personality,stack,syscall}, and the syscalls
+process_vm_readv and process_vm_writev which are used for
+interprocess services, communication and introspection
+(like synchronisation, signaling, debugging, tracing and
+profiling) of processes.</description>
+      </application>
+      <application>
+        <name>elfutils-libelf</name>
+        <version>0.187</version>
+        <release>4.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://elfutils.org/</url>
+        <summary>Library to read and write ELF files</summary>
+        <description>The elfutils-libelf package provides a DSO which allows reading and
+writing ELF files on a high level.  Third party programs depend on
+this package to read internals of ELF files.  The programs of the
+elfutils package use it also to generate new ELF files.</description>
+      </application>
+      <application>
+        <name>elfutils-libs</name>
+        <version>0.187</version>
+        <release>4.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://elfutils.org/</url>
+        <summary>Libraries to handle compiled objects</summary>
+        <description>The elfutils-libs package contains libraries which implement DWARF, ELF,
+and machine-specific ELF handling and process introspection.  These
+libraries are used by the programs in the elfutils package.  The
+elfutils-devel package enables building other programs using these
+libraries.</description>
+      </application>
+      <application>
+        <name>expat</name>
+        <version>2.4.8</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://libexpat.github.io/</url>
+        <summary>An XML parser library</summary>
+        <description>This is expat, the C library for parsing XML, written by James Clark. Expat
+is a stream oriented XML parser. This means that you register handlers with
+the parser prior to starting the parse. These handlers are called when the
+parser discovers the associated structures in the document being parsed. A
+start tag is an example of the kind of structures for which you may
+register handlers.</description>
       </application>
       <application>
         <name>fedora-gpg-keys</name>
-        <version>33</version>
-        <release>3</release>
+        <version>37</version>
+        <release>0.2</release>
         <arch>noarch</arch>
         <url>https://fedoraproject.org/</url>
         <summary>Fedora RPM keys</summary>
@@ -64,8 +407,8 @@ incorporates useful features from the Korn shell (ksh) and the C shell
       </application>
       <application>
         <name>fedora-release</name>
-        <version>33</version>
-        <release>3</release>
+        <version>37</version>
+        <release>0.5</release>
         <arch>noarch</arch>
         <url>https://fedoraproject.org/</url>
         <summary>Fedora release files</summary>
@@ -74,8 +417,8 @@ and systemd preset files that determine which services are enabled by default.</
       </application>
       <application>
         <name>fedora-release-common</name>
-        <version>33</version>
-        <release>3</release>
+        <version>37</version>
+        <release>0.5</release>
         <arch>noarch</arch>
         <url>https://fedoraproject.org/</url>
         <summary>Fedora release files</summary>
@@ -83,8 +426,8 @@ and systemd preset files that determine which services are enabled by default.</
       </application>
       <application>
         <name>fedora-release-identity-basic</name>
-        <version>33</version>
-        <release>3</release>
+        <version>37</version>
+        <release>0.5</release>
         <arch>noarch</arch>
         <url>https://fedoraproject.org/</url>
         <summary>Package providing the basic Fedora identity</summary>
@@ -93,17 +436,48 @@ itself as a particular Edition or Spin.</description>
       </application>
       <application>
         <name>fedora-repos</name>
-        <version>33</version>
-        <release>3</release>
+        <version>37</version>
+        <release>0.2</release>
         <arch>noarch</arch>
         <url>https://fedoraproject.org/</url>
         <summary>Fedora package repositories</summary>
         <description>Fedora package repository files for yum and dnf along with gpg public keys.</description>
       </application>
+      <application>
+        <name>fedora-repos-rawhide</name>
+        <version>37</version>
+        <release>0.2</release>
+        <arch>noarch</arch>
+        <url>https://fedoraproject.org/</url>
+        <summary>Rawhide repo definitions</summary>
+        <description>This package provides the rawhide repo definitions.</description>
+      </application>
+      <application>
+        <name>file</name>
+        <version>5.41</version>
+        <release>5.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.darwinsys.com/file/</url>
+        <summary>Utility for determining file types</summary>
+        <description>The file command is used to identify a particular file according to the
+type of data contained by the file.  File can identify many different
+file types, including ELF binaries, system libraries, RPM packages, and
+different graphics formats.</description>
+      </application>
+      <application>
+        <name>file-libs</name>
+        <version>5.41</version>
+        <release>5.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.darwinsys.com/file/</url>
+        <summary>Libraries for applications using libmagic</summary>
+        <description>
+Libraries for applications using libmagic.</description>
+      </application>
       <application>
         <name>filesystem</name>
-        <version>3.14</version>
-        <release>3.fc33</release>
+        <version>3.16</version>
+        <release>2.fc36</release>
         <arch>x86_64</arch>
         <url>https://pagure.io/filesystem</url>
         <summary>The basic directory layout for a Linux system</summary>
@@ -112,10 +486,100 @@ on a Linux system. Filesystem contains the basic directory layout
 for a Linux operating system, including the correct permissions for
 the directories.</description>
       </application>
+      <application>
+        <name>findutils</name>
+        <epoch>1</epoch>
+        <version>4.9.0</version>
+        <release>1.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://www.gnu.org/software/findutils/</url>
+        <summary>The GNU versions of find utilities (find and xargs)</summary>
+        <description>The findutils package contains programs which will help you locate
+files on your system.  The find utility searches through a hierarchy
+of directories looking for files which match a certain set of criteria
+(such as a file name pattern).  The xargs utility builds and executes
+command lines from standard input arguments (usually lists of file
+names generated by the find command).
+
+You should install findutils because it includes tools that are very
+useful for finding things on your system.</description>
+      </application>
+      <application>
+        <name>fuse-libs</name>
+        <version>2.9.9</version>
+        <release>14.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://fuse.sf.net</url>
+        <summary>File System in Userspace (FUSE) v2 libraries</summary>
+        <description>Devel With FUSE it is possible to implement a fully functional filesystem in a
+userspace program. This package contains the FUSE v2 libraries.</description>
+      </application>
+      <application>
+        <name>gawk</name>
+        <version>5.1.1</version>
+        <release>3.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.gnu.org/software/gawk/</url>
+        <summary>The GNU version of the AWK text processing utility</summary>
+        <description>The gawk package contains the GNU version of AWK text processing utility. AWK is
+a programming language designed for text processing and typically used as a data
+extraction and reporting tool.
+
+The gawk utility can be used to do quick and easy text pattern matching,
+extracting or reformatting. It is considered to be a standard Linux tool for
+text processing.</description>
+      </application>
+      <application>
+        <name>gawk-all-langpacks</name>
+        <version>5.1.1</version>
+        <release>3.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.gnu.org/software/gawk/</url>
+        <summary>Additional localisation files for gawk utility</summary>
+        <description>The base package of gawk supports only the english localisation. This subpackage
+contains additional localisation files.</description>
+      </application>
+      <application>
+        <name>gdbm-libs</name>
+        <epoch>1</epoch>
+        <version>1.22</version>
+        <release>2.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://www.gnu.org/software/gdbm/</url>
+        <summary>Libraries files for gdbm</summary>
+        <description>Libraries for the Gdbm GNU database indexing library</description>
+      </application>
+      <application>
+        <name>gettext</name>
+        <version>0.21</version>
+        <release>13.fc37.0.20220203</release>
+        <arch>x86_64</arch>
+        <url>https://www.gnu.org/software/gettext/</url>
+        <summary>GNU libraries and utilities for producing multi-lingual messages</summary>
+        <description>The GNU gettext package provides a set of tools and documentation for
+producing multi-lingual messages in programs. Tools include a set of
+conventions about how programs should be written to support message
+catalogs, a directory and file naming organization for the message
+catalogs, a runtime library which supports the retrieval of translated
+messages, and stand-alone programs for handling the translatable and
+the already translated strings. Gettext provides an easy to use
+library and tools for creating, using, and modifying natural language
+catalogs and is a powerful and simple method for internationalizing
+programs.</description>
+      </application>
+      <application>
+        <name>gettext-libs</name>
+        <version>0.21</version>
+        <release>13.fc37.0.20220203</release>
+        <arch>x86_64</arch>
+        <url>https://www.gnu.org/software/gettext/</url>
+        <summary>Libraries for gettext</summary>
+        <description>This package contains libraries used internationalization support.</description>
+      </application>
       <application>
         <name>glibc</name>
-        <version>2.32</version>
-        <release>4.fc33</release>
+        <version>2.35.9000</version>
+        <release>20.fc37</release>
         <arch>x86_64</arch>
         <url>http://www.gnu.org/software/glibc/</url>
         <summary>The GNU libc libraries</summary>
@@ -127,115 +591,1670 @@ contains the most important sets of shared libraries: the standard C
 library and the standard math library. Without these two libraries, a
 Linux system will not function.</description>
       </application>
-      <application>
-        <name>glibc-all-langpacks</name>
-        <version>2.32</version>
-        <release>4.fc33</release>
-        <arch>x86_64</arch>
-        <url>http://www.gnu.org/software/glibc/</url>
-        <summary>All language packs for glibc.</summary>
-      </application>
       <application>
         <name>glibc-common</name>
-        <version>2.32</version>
-        <release>4.fc33</release>
+        <version>2.35.9000</version>
+        <release>20.fc37</release>
         <arch>x86_64</arch>
         <url>http://www.gnu.org/software/glibc/</url>
         <summary>Common binaries and locale data for glibc</summary>
         <description>The glibc-common package includes common binaries for the GNU libc
 libraries, as well as national language (locale) support.</description>
+      </application>
+      <application>
+        <name>glibc-gconv-extra</name>
+        <version>2.35.9000</version>
+        <release>20.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://www.gnu.org/software/glibc/</url>
+        <summary>All iconv converter modules for glibc.</summary>
+        <description>This package contains all iconv converter modules built in glibc.</description>
+      </application>
+      <application>
+        <name>glibc-minimal-langpack</name>
+        <version>2.35.9000</version>
+        <release>20.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://www.gnu.org/software/glibc/</url>
+        <summary>Minimal language packs for glibc.</summary>
+        <description>This is a Meta package that is used to install minimal language packs.
+This package ensures you can use C, POSIX, or C.UTF-8 locales, but
+nothing else. It is designed for assembling a minimal system.</description>
+      </application>
+      <application>
+        <name>gmp</name>
+        <epoch>1</epoch>
+        <version>6.2.1</version>
+        <release>2.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://gmplib.org/</url>
+        <summary>GNU arbitrary precision library</summary>
+        <description>The gmp package contains GNU MP, a library for arbitrary precision
+arithmetic, signed integers operations, rational numbers and floating
+point numbers. GNU MP is designed for speed, for both small and very
+large operands. GNU MP is fast because it uses fullwords as the basic
+arithmetic type, it uses fast algorithms, it carefully optimizes
+assembly code for many CPUs' most common inner loops, and it generally
+emphasizes speed over simplicity/elegance in its operations.
+
+Install the gmp package if you need a fast arbitrary precision
+library.</description>
       </application>
       <application>
         <name>gpg-pubkey</name>
-        <version>9570ff31</version>
-        <release>5e3006fb</release>
+        <version>eb10b464</version>
+        <release>6202d9c6</release>
         <arch>(none)</arch>
         <url>(none)</url>
-        <summary>Fedora (33) &lt;fedora-33-primary@fedoraproject.org&gt; public key</summary>
+        <summary>Fedora (38) &lt;fedora-38-primary@fedoraproject.org&gt; public key</summary>
         <description>-----BEGIN PGP PUBLIC KEY BLOCK-----
-Version: rpm-4.16.1.2 (NSS-3)
-
-mQINBF4wBvsBEADQmcGbVUbDRUoXADReRmOOEMeydHghtKC9uRs9YNpGYZIB+bie
-bGYZmflQayfh/wEpO2W/IZfGpHPL42V7SbyvqMjwNls/fnXsCtf4LRofNK8Qd9fN
-kYargc9R7BEz/mwXKMiRQVx+DzkmqGWy2gq4iD0/mCyf5FdJCE40fOWoIGJXaOI1
-Tz1vWqKwLS5T0dfmi9U4Tp/XsKOZGvN8oi5h0KmqFk7LEZr1MXarhi2Va86sgxsF
-QcZEKfu5tgD0r00vXzikoSjn3qA5JW5FW07F1pGP4bF5f9J3CZbQyOjTSWMmmfTm
-2d2BURWzaDiJN9twY2yjzkoOMuPdXXvovg7KxLcQerKT+FbKbq8DySJX2rnOA77k
-UG4c9BGf/L1uBkAT8dpHLk6Uf5BfmypxUkydSWT1xfTDnw1MqxO0MsLlAHOR3J7c
-oW9kLcOLuCQn1hBEwfZv7VSWBkGXSmKfp0LLIxAFgRtv+Dh+rcMMRdJgKr1V3FU+
-rZ1+ZAfYiBpQJFPjv70vx+rGEgS801D3PJxBZUEy4Ic4ZYaKNhK9x9PRQuWcIBuW
-6eTe/6lKWZeyxCumLLdiS75mF2oTcBaWeoc3QxrPRV15eDKeYJMbhnUai/7lSrhs
-EWCkKR1RivgF4slYmtNE5ZPGZ/d61zjwn2xi4xNJVs8q9WRPMpHp0vCyMwARAQAB
-tDFGZWRvcmEgKDMzKSA8ZmVkb3JhLTMzLXByaW1hcnlAZmVkb3JhcHJvamVjdC5v
-cmc+iQI4BBMBAgAiBQJeMAb7AhsPBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAK
-CRBJ/XdJlXD/MZm2D/9kriL43vd3+0DNMeA82n2v9mSR2PQqKny39xNlYPyy/1yZ
-P/KXoa4NYSCA971LSd7lv4n/h5bEKgGHxZfttfOzOnWMVSSTfjRyM/df/NNzTUEV
-7ORA5GW18g8PEtS7uRxVBf3cLvWu5q+8jmqES5HqTAdGVcuIFQeBXFN8Gy1Jinuz
-AH8rJSdkUeZ0cehWbERq80BWM9dhad5dW+/+Gv0foFBvP15viwhWqajr8V0B8es+
-2/tHI0k86FAujV5i0rrXl5UOoLilO57QQNDZH/qW9GsHwVI+2yecLstpUNLq+EZC
-GqTZCYoxYRpl0gAMbDLztSL/8Bc0tJrCRG3tavJotFYlgUK60XnXlQzRkh9rgsfT
-EXbQifWdQMMogzjCJr0hzJ+V1d0iozdUxB2ZEgTjukOvatkB77DY1FPZRkSFIQs+
-fdcjazDIBLIxwJu5QwvTNW8lOLnJ46g4sf1WJoUdNTbR0BaC7HHj1inVWi0p7IuN
-66EPGzJOSjLK+vW+J0ncPDEgLCV74RF/0nR5fVTdrmiopPrzFuguHf9S9gYI3Zun
-Yl8FJUu4kRO6JPPTicUXWX+8XZmE94aK14RCJL23nOSi8T1eW8JLW43dCBRO8QUE
-Aso1t2pypm/1zZexJdOV8yGME3g5l2W6PLgpz58DBECgqc/kda+VWgEAp7rO2A==
-=EPL3
+Version: rpm-4.17.0 (NSS-3)
+
+mQINBGIC2cYBEADJye1aE0AR17qwj6wsHWlCQlcihmqkL8s4gbOk1IevBbH4iXJx
+lu6bN+NhTcCCX6eHmaL5Pwb/bpkMmLR+/r1D2cLDK24YzvN6kJnwRQUTf2dbqYmg
+mNBgIMm+kAabBZPwUHUzyQ9CT/WJpYr1OYu8JIkdxF35nrPewnnOUUqxqbi8fXRQ
+gskSLF8UveiOjFIqmWwlPwT1UtnevAaF80UGQlkwFvqjjh4b9vKY2gHMAQwt+wg5
+HFFCSwSrnd88ZoDb3pKvDMeurYUiPzF5f2r+ziVkMuaSNckvp58uge7HvyqQPAdJ
+ZRswCCxhUAo9VqkNfB4Ud25ASyalk9jOE3HB8E35gFfPXvuX1n15THXNcwMEiybk
+Omne2YwXL8ShGNr5otjqywThMrrqcl2g/pJVTcpDHTR5Hn9YRp+GHlYLjyEr+/x7
+xM19y9ca9GUiJqDbEREHcKKIhYiGmcIjjcJvei/3C/aM4pqeGFJBbVSnw3qeMxH/
+6ArAMA1sAdShCkv2YjlcF0r4uoCjXdS3xrKLz9PSCquot7RySnOE9TZ7flfJll7Z
+q+lNaSeJg7FK8VWSUb9Lit6VEYVbzWKzespDDbujrHbFpydyq8gXurk7bSR2w0te
+gsmytQqT/w1z2bydgGF6SfY9Px0wuA8GQKr48l5Bhdc6+vHHFqPKzz0PVQARAQAB
+tDFGZWRvcmEgKDM4KSA8ZmVkb3JhLTM4LXByaW1hcnlAZmVkb3JhcHJvamVjdC5v
+cmc+iQJOBBMBCAA4FiEEalG7q7o9VGe2FxIhgJqNfOsQtGQFAmIC2cYCGw8FCwkI
+BwIGFQoJCAsCBBYCAwECHgECF4AACgkQgJqNfOsQtGScyw/7BLmD4Fwi4QZY94zl
+vlJdNufZRavOemSIVVDHoCr8pQBAdrvoMypxJd5zM4ODIqFsjdYpFti+Tkeq4/4U
+25UoLPEOtU8UDt2uq7LqfdCxspaj7VyXAJIkpf7wEvLS4Jzo+YaMIlsd0dCrMXTM
+vhu4gKpBFW6C+gGlmuDyTJbyrf7ilytgVzVtIfRrT7XffylviIlZHwKm43UDjvzX
+YEl3EAFR1RjATwXMy2aJh7GCNsz+fKs+7YRKQUhpMF5un/2pyNJO+LbVGGwGZvga
+K9Kfsg/4r1ync4nDDD1dadKIHhobDeiJ9uZLoBvvVDz7Ywu7q/vv4zIPxstYBNq4
+6fLKDtYXuJCK0EV9Qy4ox67t0UGlaRGH8y5YUqOI10xH7iQej0xWlSc8w2dKhPz8
+z9XLv2OMK+PvqvflhFHhWkqEoQRqTu0TVD0fLLe4lqieJlqZcJqW0F9G/vNSSWmf
+POLa/Nim71gL2fPjCJOIRV4K/cJSyBmu5NchG7dHD5sUtJxZ4TFSuepaBZ8cPK1x
+e26TaCBqoUWgUXWmw+P89aOpYOJYEFfT/VAm2Ywn+c1EFUmD+30wQ7aP/RUFl94z
+n0BjqsWDnCKVFHydZ0TZSpeADmXMg2VYZPcp/cQR1KjoBoDxAscis7b1XPQUg7CB
+zquq5jBVAnsNIhs7g47GWKyDUJM=
+=aCLl
 -----END PGP PUBLIC KEY BLOCK-----
 </description>
       </application>
       <application>
-        <name>libgcc</name>
-        <version>10.2.1</version>
-        <release>9.fc33</release>
+        <name>gpg-pubkey</name>
+        <version>5323552a</version>
+        <release>6112bcdc</release>
+        <arch>(none)</arch>
+        <url>(none)</url>
+        <summary>Fedora (37) &lt;fedora-37-primary@fedoraproject.org&gt; public key</summary>
+        <description>-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: rpm-4.17.0 (NSS-3)
+
+mQINBGESvNwBEAC7HsCDTlugVeDSMFX6aW3zAPFMfvBssNj+89fdmbxcI9t7UY6f
+HvkkGziUET8e+9jB8R2/wXQCGOw1J+sfmwO4aN0LdVQjhKvVNj+F5jWt3m5FAIBa
+OTWS6Kvqw2ECTpH7fD86541eK3BuCni6d5U3PCd73t976FcUmpQ/1AthqMksM0Jz
+cJapvNmLTCR0NZ2XyyLmn/K1hgNXe8G5j0cSrJiY+Zpz5aQkT96j96Jm6W2A+tBI
+icU4n6V4vlj2TxmCumtXJGXGBGJnof/dCgh45aqi+sk5c429ns+5sooYcaEJojj6
+FYSITv10l+az6ZMJz/j61VYSkhMY8hQ4Wd+yL2JVzLE9N9V0L95sX1yEZ5ILmzwx
+oRKe4WHSBE6yMxNWobv7hmC+3ZC5mLPaEDS/g/0xuQj9Sy9eT2mhhFPxOv29YQ+P
+sC3zXHJMMT0tlGd72PVHQQ0JYONfMhcC+7AHGFGz8p4/wor2jIFG1ouqE6Lfzm8o
+XWZMYm3AydlrP/xkYaoWNE3jL/+dskSBr/Yz7ZzlkAqH9lb1HKnXQLTrw6gz6pmI
+KufSDXjEFNxnFI/9gMlshJtk5+QSDzezmxFm+NMviSvDUNAVIzrU1D84dauBYph4
+OrJVeECQHEotny/I53AdlVwLYB4TWkObzTs6vtV7Pz1TK2CmHpe3UW72xwARAQAB
+tDFGZWRvcmEgKDM3KSA8ZmVkb3JhLTM3LXByaW1hcnlAZmVkb3JhcHJvamVjdC5v
+cmc+iQJOBBMBCAA4FiEErLXuToMcdLt8Fo0n9VrT+1MjVSoFAmESvNwCGw8FCwkI
+BwIGFQoJCAsCBBYCAwECHgECF4AACgkQ9VrT+1MjVSoPMhAAist7kK/YtcyBL/dt
+P55hPrkJT6Ay+e2Dvt4Pixe4iT32Y3jG12aoX2LY//mxVOOpV+EhXYTTb5aLt2Jj
+a8/qCKJFk7zuCOxa1hgdRcjoR7ZbU0lNjD9mMCax/YT9QafcaMEib/FlknP3g1SN
+GRSKLObTJd6BbtZXCE80JRIX+Dy6+/Oz7LXRXeKpiimhlXT1wuTaqAJEtuHdQvg7
+dkL4DzAJ2FiURVd5gvgo266WaCMafJjFRrSGHJm0c+V+0Z9NsuH80JbPm+rCUh5U
+E9PMyztqlqtldtqc1+aZ1iUbVuXY059BUmlAhmf5sAlBktY+hEabH/4kmfGccbBL
+TyBIn03Y9q9173okZSUe6q16m/hbbWI8dwkSpIADZbGGJbRi8PJpCg9y6KI355qD
+atE2irleoy6eXqpKa+uPTRBk7i/r6jDoA+u+tZyFfcEnwvSWP8cN1j5mNklvITZl
+YF1n5b3fejkZVdOmRZQNkyzMxYEd4UZFQZNYrx0nltAagRS8b5ikqNk2UTl+dyBG
+k9gLOSZhAa2JdmAqwe9rT69jaa4kZMLlxPPC3246s83t0s7lp7vF+zLPfPSvxpsU
+tg+fuT+OFKWYdBFF7VkEA+wezHAznIP6TPyQXbBpkzE889/hOXy4BYs0wy8Bpda/
+Ve2Ba329f99dSCZKImi5DPCxJY4=
+=ZmVd
+-----END PGP PUBLIC KEY BLOCK-----
+</description>
+      </application>
+      <application>
+        <name>grep</name>
+        <version>3.7</version>
+        <release>2.fc36</release>
         <arch>x86_64</arch>
-        <url>http://gcc.gnu.org</url>
-        <summary>GCC version 10 shared support library</summary>
-        <description>This package contains GCC shared support library which is needed
-e.g. for exception handling support.</description>
+        <url>https://www.gnu.org/software/grep/</url>
+        <summary>Pattern matching utilities</summary>
+        <description>The GNU versions of commonly used grep utilities. Grep searches through
+textual input for lines which contain a match to a specified pattern and then
+prints the matching lines. GNU's grep utilities include grep, egrep and fgrep.
+
+GNU grep is needed by many scripts, so it shall be installed on every system.</description>
       </application>
       <application>
-        <name>ncurses-base</name>
-        <version>6.2</version>
-        <release>3.20200222.fc33</release>
+        <name>grub2-common</name>
+        <epoch>1</epoch>
+        <version>2.06</version>
+        <release>41.fc37</release>
         <arch>noarch</arch>
-        <url>https://invisible-island.net/ncurses/ncurses.html</url>
-        <summary>Descriptions of common terminals</summary>
-        <description>This package contains descriptions of common terminals. Other terminal
-descriptions are included in the ncurses-term package.</description>
+        <url>http://www.gnu.org/software/grub/</url>
+        <summary>grub2 common layout</summary>
+        <description>This package provides some directories which are required by various grub2
+subpackages.</description>
       </application>
       <application>
-        <name>ncurses-libs</name>
-        <version>6.2</version>
-        <release>3.20200222.fc33</release>
+        <name>grub2-tools</name>
+        <epoch>1</epoch>
+        <version>2.06</version>
+        <release>41.fc37</release>
         <arch>x86_64</arch>
-        <url>https://invisible-island.net/ncurses/ncurses.html</url>
-        <summary>Ncurses libraries</summary>
-        <description>The curses library routines are a terminal-independent method of
-updating character screens with reasonable optimization.  The ncurses
-(new curses) library is a freely distributable replacement for the
-discontinued 4.4 BSD classic curses library.
+        <url>http://www.gnu.org/software/grub/</url>
+        <summary>Support tools for GRUB.</summary>
+        <description>
+The GRand Unified Bootloader (GRUB) is a highly configurable and
+customizable bootloader with modular architecture.  It supports a rich
+variety of kernel formats, file systems, computer architectures and
+hardware devices.
 
-This package contains the ncurses libraries.</description>
+This subpackage provides tools for support of all platforms.</description>
       </application>
       <application>
-        <name>setup</name>
-        <version>2.13.7</version>
-        <release>2.fc33</release>
-        <arch>noarch</arch>
-        <url>https://pagure.io/setup/</url>
-        <summary>A set of system configuration and setup files</summary>
-        <description>The setup package contains a set of important system configuration and
-setup files, such as passwd, group, and profile.</description>
+        <name>grub2-tools-minimal</name>
+        <epoch>1</epoch>
+        <version>2.06</version>
+        <release>41.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://www.gnu.org/software/grub/</url>
+        <summary>Support tools for GRUB.</summary>
+        <description>
+The GRand Unified Bootloader (GRUB) is a highly configurable and
+customizable bootloader with modular architecture.  It supports a rich
+variety of kernel formats, file systems, computer architectures and
+hardware devices.
+
+This subpackage provides tools for support of all platforms.</description>
       </application>
       <application>
-        <name>tzdata</name>
-        <version>2021a</version>
-        <release>1.fc33</release>
+        <name>grubby</name>
+        <version>8.40</version>
+        <release>60.fc37</release>
+        <arch>x86_64</arch>
+        <url>(none)</url>
+        <summary>Command line tool for updating bootloader configs</summary>
+        <description>This package provides a grubby compatibility script that manages
+BootLoaderSpec files and is meant to be backward compatible with
+the previous grubby tool.</description>
+      </application>
+      <application>
+        <name>gzip</name>
+        <version>1.12</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.gzip.org/</url>
+        <summary>GNU data compression program</summary>
+        <description>The gzip package contains the popular GNU gzip data compression
+program. Gzipped files have a .gz extension.
+
+Gzip should be installed on your system, because it is a
+very commonly used data compression program.</description>
+      </application>
+      <application>
+        <name>json-c</name>
+        <version>0.16</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/json-c/json-c</url>
+        <summary>JSON implementation in C</summary>
+        <description>JSON-C implements a reference counting object model that allows you
+to easily construct JSON objects in C, output them as JSON formatted
+strings and parse JSON formatted strings back into the C representation
+of JSON objects.  It aims to conform to RFC 7159.</description>
+      </application>
+      <application>
+        <name>kbd</name>
+        <version>2.4.0</version>
+        <release>9.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://www.kbd-project.org/</url>
+        <summary>Tools for configuring the console (keyboard, virtual terminals, etc.)</summary>
+        <description>The kbd package contains tools for managing a Linux
+system's console's behavior, including the keyboard, the screen
+fonts, the virtual terminals and font files.</description>
+      </application>
+      <application>
+        <name>kbd-misc</name>
+        <version>2.4.0</version>
+        <release>9.fc36</release>
         <arch>noarch</arch>
-        <url>https://www.iana.org/time-zones</url>
-        <summary>Timezone data</summary>
-        <description>This package contains data files with rules for various timezones around
-the world.</description>
+        <url>http://www.kbd-project.org/</url>
+        <summary>Data for kbd package</summary>
+        <description>The kbd-misc package contains data for kbd package - console fonts,
+keymaps etc. Please note that kbd-misc is not helpful without kbd.</description>
+      </application>
+      <application>
+        <name>kernel</name>
+        <version>5.19.0</version>
+        <release>0.rc1.14.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.kernel.org/</url>
+        <summary>The Linux kernel</summary>
+        <description>The kernel meta package</description>
+      </application>
+      <application>
+        <name>kernel-core</name>
+        <version>5.19.0</version>
+        <release>0.rc1.14.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.kernel.org/</url>
+        <summary>The Linux kernel</summary>
+        <description>The kernel package contains the Linux kernel (vmlinuz), the core of any
+Linux operating system.  The kernel handles the basic functions
+of the operating system: memory allocation, process allocation, device
+input and output, etc.</description>
+      </application>
+      <application>
+        <name>kernel-modules</name>
+        <version>5.19.0</version>
+        <release>0.rc1.14.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.kernel.org/</url>
+        <summary>kernel modules to match the core kernel</summary>
+        <description>This package provides commonly used kernel modules for the core kernel package.</description>
+      </application>
+      <application>
+        <name>keyutils-libs</name>
+        <version>1.6.1</version>
+        <release>4.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://people.redhat.com/~dhowells/keyutils/</url>
+        <summary>Key utilities library</summary>
+        <description>This package provides a wrapper library for the key management facility system
+calls.</description>
+      </application>
+      <application>
+        <name>kmod</name>
+        <version>29</version>
+        <release>7.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://git.kernel.org/pub/scm/utils/kernel/kmod/kmod.git</url>
+        <summary>Linux kernel module management utilities</summary>
+        <description>The kmod package provides various programs needed for automatic
+loading and unloading of modules under 2.6, 3.x, and later kernels, as well
+as other module management programs. Device drivers and filesystems are two
+examples of loaded and unloaded modules.</description>
+      </application>
+      <application>
+        <name>kmod-libs</name>
+        <version>29</version>
+        <release>7.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://git.kernel.org/pub/scm/utils/kernel/kmod/kmod.git</url>
+        <summary>Libraries to handle kernel module loading and unloading</summary>
+        <description>The kmod-libs package provides runtime libraries for any application that
+wishes to load or unload Linux kernel modules from the running system.</description>
+      </application>
+      <application>
+        <name>kpartx</name>
+        <version>0.8.9</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://christophe.varoqui.free.fr/</url>
+        <summary>Partition device manager for device-mapper devices</summary>
+        <description>kpartx manages partition creation and removal for device-mapper devices.</description>
+      </application>
+      <application>
+        <name>krb5-libs</name>
+        <version>1.19.2</version>
+        <release>9.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://web.mit.edu/kerberos/www/</url>
+        <summary>The non-admin shared libraries used by Kerberos 5</summary>
+        <description>Kerberos is a network authentication system. The krb5-libs package
+contains the shared libraries needed by Kerberos 5. If you are using
+Kerberos, you need to install this package.</description>
+      </application>
+      <application>
+        <name>libacl</name>
+        <version>2.3.1</version>
+        <release>3.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://savannah.nongnu.org/projects/acl</url>
+        <summary>Dynamic library for access control list support</summary>
+        <description>This package contains the libacl.so dynamic library which contains
+the POSIX 1003.1e draft standard 17 functions for manipulating access
+control lists.</description>
+      </application>
+      <application>
+        <name>libarchive</name>
+        <version>3.6.1</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.libarchive.org/</url>
+        <summary>A library for handling streaming archive formats</summary>
+        <description>Libarchive is a programming library that can create and read several different
+streaming archive formats, including most popular tar variants, several cpio
+formats, and both BSD and GNU ar variants. It can also write shar archives and
+read ISO9660 CDROM images and ZIP archives.</description>
+      </application>
+      <application>
+        <name>libargon2</name>
+        <version>20171227</version>
+        <release>9.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/P-H-C/phc-winner-argon2</url>
+        <summary>The password-hashing library</summary>
+        <description>Argon2 is a password-hashing function that summarizes the state of the art
+in the design of memory-hard functions and can be used to hash passwords
+for credential storage, key derivation, or other applications.</description>
+      </application>
+      <application>
+        <name>libattr</name>
+        <version>2.5.1</version>
+        <release>4.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://savannah.nongnu.org/projects/attr</url>
+        <summary>Dynamic library for extended attribute support</summary>
+        <description>This package contains the libattr.so dynamic library which contains
+the extended attribute system calls and library functions.</description>
+      </application>
+      <application>
+        <name>libblkid</name>
+        <version>2.38</version>
+        <release>3.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://en.wikipedia.org/wiki/Util-linux</url>
+        <summary>Block device ID library</summary>
+        <description>This is block device identification library, part of util-linux.</description>
+      </application>
+      <application>
+        <name>libbpf</name>
+        <epoch>2</epoch>
+        <version>0.8.0</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/libbpf/libbpf</url>
+        <summary>Libbpf library</summary>
+        <description>A mirror of bpf-next linux tree bpf-next/tools/lib/bpf directory plus its
+supporting header files. The version of the package reflects the version of
+ABI.</description>
+      </application>
+      <application>
+        <name>libbrotli</name>
+        <version>1.0.9</version>
+        <release>7.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/google/brotli</url>
+        <summary>Library for brotli lossless compression algorithm</summary>
+        <description>Brotli is a generic-purpose lossless compression algorithm that compresses
+data using a combination of a modern variant of the LZ77 algorithm, Huffman
+coding and 2nd order context modeling, with a compression ratio comparable
+to the best currently available general-purpose compression methods.
+It is similar in speed with deflate but offers more dense compression.</description>
+      </application>
+      <application>
+        <name>libcap</name>
+        <version>2.48</version>
+        <release>4.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://sites.google.com/site/fullycapable/</url>
+        <summary>Library for getting and setting POSIX.1e capabilities</summary>
+        <description>libcap is a library for getting and setting POSIX.1e (formerly POSIX 6)
+draft 15 capabilities.</description>
+      </application>
+      <application>
+        <name>libcap-ng</name>
+        <version>0.8.3</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://people.redhat.com/sgrubb/libcap-ng/</url>
+        <summary>Alternate posix capabilities library</summary>
+        <description>Libcap-ng is a library that makes using posix capabilities easier</description>
+      </application>
+      <application>
+        <name>libcbor</name>
+        <version>0.7.0</version>
+        <release>5.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://libcbor.org</url>
+        <summary>A CBOR parsing library</summary>
+        <description>libcbor is a C library for parsing and generating CBOR.</description>
+      </application>
+      <application>
+        <name>libcom_err</name>
+        <version>1.46.5</version>
+        <release>2.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://e2fsprogs.sourceforge.net/</url>
+        <summary>Common error description library</summary>
+        <description>This is the common error description library, part of e2fsprogs.
+
+libcom_err is an attempt to present a common error-handling mechanism.</description>
+      </application>
+      <application>
+        <name>libcurl</name>
+        <version>7.83.1</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://curl.se/</url>
+        <summary>A library for getting files from web servers</summary>
+        <description>libcurl is a free and easy-to-use client-side URL transfer library, supporting
+FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, LDAP, LDAPS, FILE, IMAP,
+SMTP, POP3 and RTSP. libcurl supports SSL certificates, HTTP POST, HTTP PUT,
+FTP uploading, HTTP form based upload, proxies, cookies, user+password
+authentication (Basic, Digest, NTLM, Negotiate, Kerberos4), file transfer
+resume, http proxy tunneling and more.</description>
+      </application>
+      <application>
+        <name>libdb</name>
+        <version>5.3.28</version>
+        <release>52.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://www.oracle.com/database/berkeley-db/</url>
+        <summary>The Berkeley DB database library for C</summary>
+        <description>The Berkeley Database (Berkeley DB) is a programmatic toolkit that
+provides embedded database support for both traditional and
+client/server applications. The Berkeley DB includes B+tree, Extended
+Linear Hashing, Fixed and Variable-length record access methods,
+transactions, locking, logging, shared memory caching, and database
+recovery. The Berkeley DB supports C, C++, and Perl APIs. It is
+used by many applications, including Python and Perl, so this should
+be installed on all systems.</description>
+      </application>
+      <application>
+        <name>libeconf</name>
+        <version>0.4.0</version>
+        <release>3.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/openSUSE/libeconf</url>
+        <summary>Enhanced config file parser library</summary>
+        <description>libeconf is a highly flexible and configurable library to parse and manage
+key=value configuration files. It reads configuration file snippets from
+different directories and builds the final configuration file from it.</description>
+      </application>
+      <application>
+        <name>libevent</name>
+        <version>2.1.12</version>
+        <release>6.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://libevent.org/</url>
+        <summary>Abstract asynchronous event notification library</summary>
+        <description>The libevent API provides a mechanism to execute a callback function
+when a specific event occurs on a file descriptor or after a timeout
+has been reached. libevent is meant to replace the asynchronous event
+loop found in event driven network servers. An application just needs
+to call event_dispatch() and can then add or remove events dynamically
+without having to change the event loop.</description>
+      </application>
+      <application>
+        <name>libfdisk</name>
+        <version>2.38</version>
+        <release>3.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://en.wikipedia.org/wiki/Util-linux</url>
+        <summary>Partitioning library for fdisk-like programs</summary>
+        <description>This is library for fdisk-like programs, part of util-linux.</description>
+      </application>
+      <application>
+        <name>libffi</name>
+        <version>3.4.2</version>
+        <release>8.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://sourceware.org/libffi</url>
+        <summary>A portable foreign function interface library</summary>
+        <description>Compilers for high level languages generate code that follow certain
+conventions.  These conventions are necessary, in part, for separate
+compilation to work.  One such convention is the &quot;calling convention&quot;.
+The calling convention is a set of assumptions made by the compiler
+about where function arguments will be found on entry to a function.  A
+calling convention also specifies where the return value for a function
+is found.
+
+Some programs may not know at the time of compilation what arguments
+are to be passed to a function.  For instance, an interpreter may be
+told at run-time about the number and types of arguments used to call a
+given function.  `Libffi' can be used in such programs to provide a
+bridge from the interpreter program to compiled code.
+
+The `libffi' library provides a portable, high level programming
+interface to various calling conventions.  This allows a programmer to
+call any function specified by a call interface description at run time.
+
+FFI stands for Foreign Function Interface.  A foreign function
+interface is the popular name for the interface that allows code
+written in one language to call code written in another language.  The
+`libffi' library really only provides the lowest, machine dependent
+layer of a fully featured foreign function interface.  A layer must
+exist above `libffi' that handles type conversions for values passed
+between the two languages.</description>
+      </application>
+      <application>
+        <name>libfido2</name>
+        <version>1.11.0</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/Yubico/libfido2</url>
+        <summary>FIDO2 library</summary>
+        <description>libfido2 is an open source library to support the FIDO2 protocol.  FIDO2 is
+an open authentication standard that consists of the W3C Web Authentication
+specification (WebAuthn API), and the Client to Authentication Protocol
+(CTAP).  CTAP is an application layer protocol used for communication
+between a client (browser) or a platform (operating system) with an external
+authentication device (for example the Yubico Security Key).</description>
+      </application>
+      <application>
+        <name>libgcc</name>
+        <version>12.1.1</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://gcc.gnu.org</url>
+        <summary>GCC version 12 shared support library</summary>
+        <description>This package contains GCC shared support library which is needed
+e.g. for exception handling support.</description>
+      </application>
+      <application>
+        <name>libgcrypt</name>
+        <version>1.10.1</version>
+        <release>3.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.gnupg.org/</url>
+        <summary>A general-purpose cryptography library</summary>
+        <description>Libgcrypt is a general purpose crypto library based on the code used
+in GNU Privacy Guard.  This is a development version.</description>
+      </application>
+      <application>
+        <name>libgomp</name>
+        <version>12.1.1</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://gcc.gnu.org</url>
+        <summary>GCC OpenMP v4.5 shared support library</summary>
+        <description>This package contains GCC shared support library which is needed
+for OpenMP v4.5 support.</description>
+      </application>
+      <application>
+        <name>libgpg-error</name>
+        <version>1.45</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.gnupg.org/related_software/libgpg-error/</url>
+        <summary>Library for error values used by GnuPG components</summary>
+        <description>This is a library that defines common error values for all GnuPG
+components.  Among these are GPG, GPGSM, GPGME, GPG-Agent, libgcrypt,
+pinentry, SmartCard Daemon and possibly more in the future.</description>
+      </application>
+      <application>
+        <name>libidn2</name>
+        <version>2.3.2</version>
+        <release>4.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://www.gnu.org/software/libidn/#libidn2</url>
+        <summary>Library to support IDNA2008 internationalized domain names</summary>
+        <description>Libidn2 is an implementation of the IDNA2008 specifications in RFC
+5890, 5891, 5892, 5893 and TR46 for internationalized domain names
+(IDN). It is a standalone library, without any dependency on libidn.</description>
+      </application>
+      <application>
+        <name>libkcapi</name>
+        <version>1.3.1</version>
+        <release>4.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://www.chronox.de/libkcapi.html</url>
+        <summary>User space interface to the Linux Kernel Crypto API</summary>
+        <description>libkcapi allows user-space to access the Linux kernel crypto API.
+
+This library uses the netlink interface and exports easy to use APIs
+so that a developer does not need to consider the low-level netlink
+interface handling.
+
+The library does not implement any cipher algorithms.  All consumer
+requests are sent to the kernel for processing.  Results from the
+kernel crypto API are returned to the consumer via the library API.
+
+The kernel interface and therefore this library can be used by
+unprivileged processes.</description>
+      </application>
+      <application>
+        <name>libkcapi-hmaccalc</name>
+        <version>1.3.1</version>
+        <release>4.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://www.chronox.de/libkcapi.html</url>
+        <summary>Drop-in replacements for hmaccalc provided by the libkcapi package</summary>
+        <description>Provides drop-in replacements for sha*hmac tools (from package
+hmaccalc) using libkcapi.</description>
+      </application>
+      <application>
+        <name>libmount</name>
+        <version>2.38</version>
+        <release>3.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://en.wikipedia.org/wiki/Util-linux</url>
+        <summary>Device mounting library</summary>
+        <description>This is the device mounting library, part of util-linux.</description>
+      </application>
+      <application>
+        <name>libnghttp2</name>
+        <version>1.47.0</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://nghttp2.org/</url>
+        <summary>A library implementing the HTTP/2 protocol</summary>
+        <description>libnghttp2 is a library implementing the Hypertext Transfer Protocol
+version 2 (HTTP/2) protocol in C.</description>
+      </application>
+      <application>
+        <name>libnsl2</name>
+        <version>2.0.0</version>
+        <release>3.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/thkukuk/libnsl</url>
+        <summary>Public client interface library for NIS(YP) and NIS+</summary>
+        <description>This package contains the libnsl library. This library contains
+the public client interface for NIS(YP) and NIS+.
+This code was formerly part of glibc, but is now standalone to
+be able to link against TI-RPC for IPv6 support.</description>
+      </application>
+      <application>
+        <name>libpsl</name>
+        <version>0.21.1</version>
+        <release>5.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://rockdaboot.github.io/libpsl</url>
+        <summary>C library for the Publix Suffix List</summary>
+        <description>libpsl is a C library to handle the Public Suffix List. A &quot;public suffix&quot; is a
+domain name under which Internet users can directly register own names.
+
+Browsers and other web clients can use it to
+
+- Avoid privacy-leaking &quot;supercookies&quot;;
+- Avoid privacy-leaking &quot;super domain&quot; certificates;
+- Domain highlighting parts of the domain in a user interface;
+- Sorting domain lists by site;
+
+Libpsl...
+
+- has built-in PSL data for fast access;
+- allows to load PSL data from files;
+- checks if a given domain is a &quot;public suffix&quot;;
+- provides immediate cookie domain verification;
+- finds the longest public part of a given domain;
+- finds the shortest private part of a given domain;
+- works with international domains (UTF-8 and IDNA2008 Punycode);
+- is thread-safe;
+- handles IDNA2008 UTS#46;</description>
+      </application>
+      <application>
+        <name>libpwquality</name>
+        <version>1.4.4</version>
+        <release>7.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/libpwquality/libpwquality/</url>
+        <summary>A library for password generation and password quality checking</summary>
+        <description>This is a library for password quality checks and generation
+of random passwords that pass the checks.
+This library uses the cracklib and cracklib dictionaries
+to perform some of the checks.</description>
+      </application>
+      <application>
+        <name>libseccomp</name>
+        <version>2.5.3</version>
+        <release>2.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/seccomp/libseccomp</url>
+        <summary>Enhanced seccomp library</summary>
+        <description>The libseccomp library provides an easy to use interface to the Linux Kernel's
+syscall filtering mechanism, seccomp.  The libseccomp API allows an application
+to specify which syscalls, and optionally which syscall arguments, the
+application is allowed to execute, all of which are enforced by the Linux
+Kernel.</description>
+      </application>
+      <application>
+        <name>libselinux</name>
+        <version>3.4</version>
+        <release>0.rc3.1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/SELinuxProject/selinux/wiki</url>
+        <summary>SELinux library and simple utilities</summary>
+        <description>Security-enhanced Linux is a feature of the Linux® kernel and a number
+of utilities with enhanced security functionality designed to add
+mandatory access controls to Linux.  The Security-enhanced Linux
+kernel contains new architectural components originally developed to
+improve the security of the Flask operating system. These
+architectural components provide general support for the enforcement
+of many kinds of mandatory access control policies, including those
+based on the concepts of Type Enforcement®, Role-based Access
+Control, and Multi-level Security.
+
+libselinux provides an API for SELinux applications to get and set
+process and file security contexts and to obtain security policy
+decisions.  Required for any applications that use the SELinux API.</description>
+      </application>
+      <application>
+        <name>libsemanage</name>
+        <version>3.4</version>
+        <release>0.rc3.1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/SELinuxProject/selinux/wiki</url>
+        <summary>SELinux binary policy manipulation library</summary>
+        <description>Security-enhanced Linux is a feature of the Linux® kernel and a number
+of utilities with enhanced security functionality designed to add
+mandatory access controls to Linux.  The Security-enhanced Linux
+kernel contains new architectural components originally developed to
+improve the security of the Flask operating system. These
+architectural components provide general support for the enforcement
+of many kinds of mandatory access control policies, including those
+based on the concepts of Type Enforcement®, Role-based Access
+Control, and Multi-level Security.
+
+libsemanage provides an API for the manipulation of SELinux binary policies.
+It is used by checkpolicy (the policy compiler) and similar tools, as well
+as by programs like load_policy that need to perform specific transformations
+on binary policies such as customizing policy boolean settings.</description>
+      </application>
+      <application>
+        <name>libsepol</name>
+        <version>3.4</version>
+        <release>0.rc3.1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/SELinuxProject/selinux/wiki</url>
+        <summary>SELinux binary policy manipulation library</summary>
+        <description>Security-enhanced Linux is a feature of the Linux® kernel and a number
+of utilities with enhanced security functionality designed to add
+mandatory access controls to Linux.  The Security-enhanced Linux
+kernel contains new architectural components originally developed to
+improve the security of the Flask operating system. These
+architectural components provide general support for the enforcement
+of many kinds of mandatory access control policies, including those
+based on the concepts of Type Enforcement®, Role-based Access
+Control, and Multi-level Security.
+
+libsepol provides an API for the manipulation of SELinux binary policies.
+It is used by checkpolicy (the policy compiler) and similar tools, as well
+as by programs like load_policy that need to perform specific transformations
+on binary policies such as customizing policy boolean settings.</description>
+      </application>
+      <application>
+        <name>libsigsegv</name>
+        <version>2.14</version>
+        <release>2.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://www.gnu.org/software/libsigsegv/</url>
+        <summary>Library for handling page faults in user mode</summary>
+        <description>This is a library for handling page faults in user mode. A page fault
+occurs when a program tries to access to a region of memory that is
+currently not available. Catching and handling a page fault is a useful
+technique for implementing:
+  - pageable virtual memory
+  - memory-mapped access to persistent databases
+  - generational garbage collectors
+  - stack overflow handlers
+  - distributed shared memory</description>
+      </application>
+      <application>
+        <name>libsmartcols</name>
+        <version>2.38</version>
+        <release>3.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://en.wikipedia.org/wiki/Util-linux</url>
+        <summary>Formatting library for ls-like programs</summary>
+        <description>This is library for ls-like terminal programs, part of util-linux.</description>
+      </application>
+      <application>
+        <name>libssh</name>
+        <version>0.9.6</version>
+        <release>4.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://www.libssh.org</url>
+        <summary>A library implementing the SSH protocol</summary>
+        <description>The ssh library was designed to be used by programmers needing a working SSH
+implementation by the mean of a library. The complete control of the client is
+made by the programmer. With libssh, you can remotely execute programs, transfer
+files, use a secure and transparent tunnel for your remote programs. With its
+Secure FTP implementation, you can play with remote files easily, without
+third-party programs others than libcrypto (from openssl).</description>
+      </application>
+      <application>
+        <name>libssh-config</name>
+        <version>0.9.6</version>
+        <release>4.fc36</release>
+        <arch>noarch</arch>
+        <url>http://www.libssh.org</url>
+        <summary>Configuration files for libssh</summary>
+        <description>The libssh-config package provides the default configuration files for libssh.</description>
+      </application>
+      <application>
+        <name>libstdc++</name>
+        <version>12.1.1</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://gcc.gnu.org</url>
+        <summary>GNU Standard C++ Library</summary>
+        <description>The libstdc++ package contains a rewritten standard compliant GCC Standard
+C++ Library.</description>
+      </application>
+      <application>
+        <name>libtasn1</name>
+        <version>4.18.0</version>
+        <release>2.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://www.gnu.org/software/libtasn1/</url>
+        <summary>The ASN.1 library used in GNUTLS</summary>
+        <description>A library that provides Abstract Syntax Notation One (ASN.1, as specified
+by the X.680 ITU-T recommendation) parsing and structures management, and
+Distinguished Encoding Rules (DER, as per X.690) encoding and decoding functions.</description>
+      </application>
+      <application>
+        <name>libtirpc</name>
+        <version>1.3.2</version>
+        <release>1.rc1.fc36.1</release>
+        <arch>x86_64</arch>
+        <url>http://git.linux-nfs.org/?p=steved/libtirpc.git;a=summary</url>
+        <summary>Transport Independent RPC Library</summary>
+        <description>This package contains SunLib's implementation of transport-independent
+RPC (TI-RPC) documentation.  This library forms a piece of the base of
+Open Network Computing (ONC), and is derived directly from the
+Solaris 2.3 source.
+
+TI-RPC is an enhanced version of TS-RPC that requires the UNIX System V
+Transport Layer Interface (TLI) or an equivalent X/Open Transport Interface
+(XTI).  TI-RPC is on-the-wire compatible with the TS-RPC, which is supported
+by almost 70 vendors on all major operating systems.  TS-RPC source code
+(RPCSRC 4.0) remains available from several internet sites.</description>
+      </application>
+      <application>
+        <name>libunistring</name>
+        <version>1.0</version>
+        <release>1.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://www.gnu.org/software/libunistring/</url>
+        <summary>GNU Unicode string library</summary>
+        <description>This portable C library implements Unicode string types in three flavours:
+(UTF-8, UTF-16, UTF-32), together with functions for character processing
+(names, classifications, properties) and functions for string processing
+(iteration, formatted output, width, word breaks, line breaks, normalization,
+case folding and regular expressions).</description>
+      </application>
+      <application>
+        <name>libutempter</name>
+        <version>1.2.1</version>
+        <release>6.fc36</release>
+        <arch>x86_64</arch>
+        <url>ftp://ftp.altlinux.org/pub/people/ldv/utempter</url>
+        <summary>A privileged helper for utmp/wtmp updates</summary>
+        <description>This library provides interface for terminal emulators such as
+screen and xterm to record user sessions to utmp and wtmp files.</description>
+      </application>
+      <application>
+        <name>libuuid</name>
+        <version>2.38</version>
+        <release>3.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://en.wikipedia.org/wiki/Util-linux</url>
+        <summary>Universally unique ID library</summary>
+        <description>This is the universally unique ID library, part of util-linux.
+
+The libuuid library generates and parses 128-bit universally unique
+id's (UUID's).  A UUID is an identifier that is unique across both
+space and time, with respect to the space of all UUIDs.  A UUID can
+be used for multiple purposes, from tagging objects with an extremely
+short lifetime, to reliably identifying very persistent objects
+across a network.
+
+See also the &quot;uuid&quot; package, which is a separate implementation.</description>
+      </application>
+      <application>
+        <name>libverto</name>
+        <version>0.3.2</version>
+        <release>3.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/latchset/libverto</url>
+        <summary>Main loop abstraction library</summary>
+        <description>libverto provides a way for libraries to expose asynchronous interfaces
+without having to choose a particular event loop, offloading this
+decision to the end application which consumes the library.
+
+If you are packaging an application, not library, based on libverto,
+you should depend either on a specific implementation module or you
+can depend on the virtual provides 'libverto-module-base'. This will
+ensure that you have at least one module installed that provides io,
+timeout and signal functionality. Currently glib is the only module
+that does not provide these three because it lacks signal. However,
+glib will support signal in the future.</description>
+      </application>
+      <application>
+        <name>libxcrypt</name>
+        <version>4.4.28</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/besser82/libxcrypt</url>
+        <summary>Extended crypt library for descrypt, md5crypt, bcrypt, and others</summary>
+        <description>libxcrypt is a modern library for one-way hashing of passwords.  It
+supports a wide variety of both modern and historical hashing methods:
+yescrypt, gost-yescrypt, scrypt, bcrypt, sha512crypt, sha256crypt,
+md5crypt, SunMD5, sha1crypt, NT, bsdicrypt, bigcrypt, and descrypt.
+It provides the traditional Unix crypt and crypt_r interfaces, as well
+as a set of extended interfaces pioneered by Openwall Linux, crypt_rn,
+crypt_ra, crypt_gensalt, crypt_gensalt_rn, and crypt_gensalt_ra.
+
+libxcrypt is intended to be used by login(1), passwd(1), and other
+similar programs; that is, to hash a small number of passwords during
+an interactive authentication dialogue with a human. It is not suitable
+for use in bulk password-cracking applications, or in any other situation
+where speed is more important than careful handling of sensitive data.
+However, it is intended to be fast and lightweight enough for use in
+servers that must field thousands of login attempts per minute.
+
+This version of the library does not provide the legacy API functions
+that have been provided by glibc's libcrypt.so.1.</description>
+      </application>
+      <application>
+        <name>libxcrypt-compat</name>
+        <version>4.4.28</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/besser82/libxcrypt</url>
+        <summary>Compatibility library providing legacy API functions</summary>
+        <description>This package contains the library providing the compatibility API
+for applications that are linked against glibc's libxcrypt, or that
+are still using the unsafe and deprecated, encrypt, encrypt_r,
+setkey, setkey_r, and fcrypt functions, which are still required by
+recent versions of POSIX, the Single UNIX Specification, and various
+other standards.
+
+All existing binary executables linked against glibc's libcrypt should
+work unmodified with the library supplied by this package.</description>
+      </application>
+      <application>
+        <name>libxkbcommon</name>
+        <version>1.4.1</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://www.x.org</url>
+        <summary>X.Org X11 XKB parsing library</summary>
+        <description>libxkbcommon is the X.Org library for compiling XKB maps into formats usable by
+the X Server or other display servers.</description>
+      </application>
+      <application>
+        <name>libxml2</name>
+        <version>2.9.14</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://xmlsoft.org/</url>
+        <summary>Library providing XML and HTML support</summary>
+        <description>This library allows to manipulate XML files. It includes support
+to read, modify and write XML and HTML files. There is DTDs support
+this includes parsing and validation even with complex DtDs, either
+at parse time or later once the document has been modified. The output
+can be a simple SAX stream or and in-memory DOM like representations.
+In this case one can use the built-in XPath and XPointer implementation
+to select sub nodes or ranges. A flexible Input/Output mechanism is
+available, with existing HTTP and FTP modules and combined to an
+URI library.</description>
+      </application>
+      <application>
+        <name>libzstd</name>
+        <version>1.5.2</version>
+        <release>2.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/facebook/zstd</url>
+        <summary>Zstd shared library</summary>
+        <description>Zstandard compression shared library.</description>
+      </application>
+      <application>
+        <name>linux-firmware</name>
+        <version>20220509</version>
+        <release>133.fc37</release>
+        <arch>noarch</arch>
+        <url>http://www.kernel.org/</url>
+        <summary>Firmware files used by the Linux kernel</summary>
+        <description>This package includes firmware files required for some devices to
+operate.</description>
+      </application>
+      <application>
+        <name>linux-firmware-whence</name>
+        <version>20220509</version>
+        <release>133.fc37</release>
+        <arch>noarch</arch>
+        <url>http://www.kernel.org/</url>
+        <summary>WHENCE License file</summary>
+        <description>This package contains the WHENCE license file which documents the vendor license details.</description>
+      </application>
+      <application>
+        <name>lua-libs</name>
+        <version>5.4.4</version>
+        <release>2.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.lua.org/</url>
+        <summary>Libraries for lua</summary>
+        <description>This package contains the shared libraries for lua.</description>
+      </application>
+      <application>
+        <name>lz4-libs</name>
+        <version>1.9.3</version>
+        <release>4.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://lz4.github.io/lz4/</url>
+        <summary>Libaries for lz4</summary>
+        <description>This package contains the libaries for lz4.</description>
+      </application>
+      <application>
+        <name>memstrack</name>
+        <version>0.2.4</version>
+        <release>2.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/ryncsn/memstrack</url>
+        <summary>A memory allocation tracer, like a hot spot analyzer for memory allocation</summary>
+        <description>A memory allocation tracer, like a hot spot analyzer for memory allocation</description>
+      </application>
+      <application>
+        <name>mkpasswd</name>
+        <version>5.5.13</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://www.linux.it/~md/software/</url>
+        <summary>Encrypt a password with crypt(3) function using a salt</summary>
+        <description>mkpasswd tool encrypts a given password with the crypt(3) libc function
+using a given salt.</description>
+      </application>
+      <application>
+        <name>mpdecimal</name>
+        <version>2.5.1</version>
+        <release>3.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://www.bytereef.org/mpdecimal/index.html</url>
+        <summary>Library for general decimal arithmetic</summary>
+        <description>The package contains a library limpdec implementing General Decimal Arithmetic
+Specification. The specification, written by Mike Cowlishaw from IBM, defines
+a general purpose arbitrary precision data type together with rigorously
+specified functions and rounding behavior.</description>
+      </application>
+      <application>
+        <name>mpfr</name>
+        <version>4.1.0</version>
+        <release>9.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://www.mpfr.org/</url>
+        <summary>C library for multiple-precision floating-point computations</summary>
+        <description>The MPFR library is a C library for multiple-precision floating-point
+computations with &quot;correct rounding&quot;. The MPFR is efficient and
+also has a well-defined semantics. It copies the good ideas from the
+ANSI/IEEE-754 standard for double-precision floating-point arithmetic
+(53-bit mantissa). MPFR is based on the GMP multiple-precision library.</description>
+      </application>
+      <application>
+        <name>ncurses-base</name>
+        <version>6.3</version>
+        <release>2.20220501.fc37</release>
+        <arch>noarch</arch>
+        <url>https://invisible-island.net/ncurses/ncurses.html</url>
+        <summary>Descriptions of common terminals</summary>
+        <description>This package contains descriptions of common terminals. Other terminal
+descriptions are included in the ncurses-term package.</description>
+      </application>
+      <application>
+        <name>ncurses-libs</name>
+        <version>6.3</version>
+        <release>2.20220501.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://invisible-island.net/ncurses/ncurses.html</url>
+        <summary>Ncurses libraries</summary>
+        <description>The curses library routines are a terminal-independent method of
+updating character screens with reasonable optimization.  The ncurses
+(new curses) library is a freely distributable replacement for the
+discontinued 4.4 BSD classic curses library.
+
+This package contains the ncurses libraries.</description>
+      </application>
+      <application>
+        <name>openldap</name>
+        <version>2.6.2</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://www.openldap.org/</url>
+        <summary>LDAP support libraries</summary>
+        <description>OpenLDAP is an open source suite of LDAP (Lightweight Directory Access
+Protocol) applications and development tools. LDAP is a set of
+protocols for accessing directory services (usually phone book style
+information, but other information is possible) over the Internet,
+similar to the way DNS (Domain Name System) information is propagated
+over the Internet. The openldap package contains configuration files,
+libraries, and documentation for OpenLDAP.</description>
+      </application>
+      <application>
+        <name>openssl-libs</name>
+        <epoch>1</epoch>
+        <version>3.0.2</version>
+        <release>4.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://www.openssl.org/</url>
+        <summary>A general purpose cryptography library with TLS implementation</summary>
+        <description>OpenSSL is a toolkit for supporting cryptography. The openssl-libs
+package contains the libraries that are used by various applications which
+support cryptographic algorithms and protocols.</description>
+      </application>
+      <application>
+        <name>openssl-pkcs11</name>
+        <version>0.4.11</version>
+        <release>8.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/OpenSC/libp11</url>
+        <summary>A PKCS#11 engine for use with OpenSSL</summary>
+        <description>openssl-pkcs11 enables hardware security module (HSM), and smart card support in
+OpenSSL applications. More precisely, it is an OpenSSL engine which makes
+registered PKCS#11 modules available for OpenSSL applications. The engine is
+optional and can be loaded by configuration file, command line or through the
+OpenSSL ENGINE API.</description>
+      </application>
+      <application>
+        <name>os-prober</name>
+        <version>1.77</version>
+        <release>9.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://kitenet.net/~joey/code/os-prober/</url>
+        <summary>Probes disks on the system for installed operating systems</summary>
+        <description>This package detects other OSes available on a system and outputs the results
+in a generic machine-readable format. Support for new OSes and Linux
+distributions can be added easily.</description>
+      </application>
+      <application>
+        <name>p11-kit</name>
+        <version>0.24.1</version>
+        <release>2.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://p11-glue.freedesktop.org/p11-kit.html</url>
+        <summary>Library for loading and sharing PKCS#11 modules</summary>
+        <description>p11-kit provides a way to load and enumerate PKCS#11 modules, as well
+as a standard configuration setup for installing PKCS#11 modules in
+such a way that they're discoverable.</description>
+      </application>
+      <application>
+        <name>p11-kit-trust</name>
+        <version>0.24.1</version>
+        <release>2.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://p11-glue.freedesktop.org/p11-kit.html</url>
+        <summary>System trust module from p11-kit</summary>
+        <description>The p11-kit-trust package contains a system trust PKCS#11 module which
+contains certificate anchors and black lists.</description>
+      </application>
+      <application>
+        <name>pam</name>
+        <version>1.5.2</version>
+        <release>12.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://www.linux-pam.org/</url>
+        <summary>An extensible library which provides authentication for applications</summary>
+        <description>PAM (Pluggable Authentication Modules) is a system security tool that
+allows system administrators to set authentication policy without
+having to recompile programs that handle authentication.</description>
+      </application>
+      <application>
+        <name>pam-libs</name>
+        <version>1.5.2</version>
+        <release>12.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://www.linux-pam.org/</url>
+        <summary>Shared libraries of the PAM package</summary>
+        <description>PAM (Pluggable Authentication Modules) is a system security tool that
+allows system administrators to set authentication policy without
+having to recompile programs that handle authentication. The pam-libs
+contains the shared libraries for PAM.</description>
+      </application>
+      <application>
+        <name>pcre</name>
+        <version>8.45</version>
+        <release>1.fc36.1</release>
+        <arch>x86_64</arch>
+        <url>https://www.pcre.org/</url>
+        <summary>Perl-compatible regular expression library</summary>
+        <description>PCRE, Perl-compatible regular expression, library has its own native API, but
+a set of wrapper functions that are based on the POSIX API are also supplied
+in the libpcreposix library. Note that this just provides a POSIX calling
+interface to PCRE: the regular expressions themselves still follow Perl syntax
+and semantics. This package provides support for strings in 8-bit and UTF-8
+encodings. Detailed change log is provided by pcre-doc package.</description>
+      </application>
+      <application>
+        <name>pcre2</name>
+        <version>10.40</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.pcre.org/</url>
+        <summary>Perl-compatible regular expression library</summary>
+        <description>PCRE2 is a re-working of the original PCRE (Perl-compatible regular
+expression) library to provide an entirely new API.
+
+PCRE2 is written in C, and it has its own API. There are three sets of
+functions, one for the 8-bit library, which processes strings of bytes, one
+for the 16-bit library, which processes strings of 16-bit values, and one for
+the 32-bit library, which processes strings of 32-bit values. There are no C++
+wrappers. This package provides support for strings in 8-bit and UTF-8
+encodings. Install pcre2-utf16 or pcre2-utf32 packages for the other ones.
+
+The distribution does contain a set of C wrapper functions for the 8-bit
+library that are based on the POSIX regular expression API (see the pcre2posix
+man page). These can be found in a library called libpcre2posix. Note that
+this just provides a POSIX calling interface to PCRE2; the regular expressions
+themselves still follow Perl syntax and semantics. The POSIX API is
+restricted, and does not give full access to all of PCRE2's facilities.</description>
+      </application>
+      <application>
+        <name>pcre2-syntax</name>
+        <version>10.40</version>
+        <release>1.fc37</release>
+        <arch>noarch</arch>
+        <url>https://www.pcre.org/</url>
+        <summary>Documentation for PCRE2 regular expressions</summary>
+        <description>This is a set of manual pages that document a syntax of the regular
+expressions implemented by the PCRE2 library.</description>
+      </application>
+      <application>
+        <name>pigz</name>
+        <version>2.7</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.zlib.net/pigz/</url>
+        <summary>Parallel implementation of gzip</summary>
+        <description>pigz, which stands for parallel implementation of gzip,
+is a fully functional replacement for gzip that exploits
+multiple processors and multiple cores to the hilt when
+compressing data.</description>
+      </application>
+      <application>
+        <name>popt</name>
+        <version>1.18</version>
+        <release>7.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/rpm-software-management/popt/</url>
+        <summary>C library for parsing command line parameters</summary>
+        <description>Popt is a C library for parsing command line parameters. Popt was
+heavily influenced by the getopt() and getopt_long() functions, but
+it improves on them by allowing more powerful argument expansion.
+Popt can parse arbitrary argv[] style arrays and automatically set
+variables based on command line arguments. Popt allows command line
+arguments to be aliased via configuration files and includes utility
+functions for parsing arbitrary strings into argv[] arrays using
+shell-like rules.</description>
+      </application>
+      <application>
+        <name>procps-ng</name>
+        <version>3.3.17</version>
+        <release>5.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://sourceforge.net/projects/procps-ng/</url>
+        <summary>System and process monitoring utilities</summary>
+        <description>The procps package contains a set of system utilities that provide
+system information. Procps includes ps, free, skill, pkill, pgrep,
+snice, tload, top, uptime, vmstat, pidof, pmap, slabtop, w, watch,
+pwdx and pidwait.
+The ps command displays a snapshot of running processes. The top command
+provides a repetitive update of the statuses of running processes.
+The free command displays the amounts of free and used memory on your
+system. The skill command sends a terminate command (or another
+specified signal) to a specified set of processes. The snice
+command is used to change the scheduling priority of specified
+processes. The tload command prints a graph of the current system
+load average to a specified tty. The uptime command displays the
+current time, how long the system has been running, how many users
+are logged on, and system load averages for the past one, five,
+and fifteen minutes. The w command displays a list of the users
+who are currently logged on and what they are running. The watch
+program watches a running program. The vmstat command displays
+virtual memory statistics about processes, memory, paging, block
+I/O, traps, and CPU activity. The pwdx command reports the current
+working directory of a process or processes. The pidwait command
+waits for processes of specified names.</description>
+      </application>
+      <application>
+        <name>publicsuffix-list-dafsa</name>
+        <version>20210518</version>
+        <release>4.fc36</release>
+        <arch>noarch</arch>
+        <url>https://publicsuffix.org/</url>
+        <summary>Cross-vendor public domain suffix database in DAFSA form</summary>
+        <description>The Public Suffix List is a cross-vendor initiative to provide
+an accurate list of domain name suffixes, maintained by the hard work
+of Mozilla volunteers and by submissions from registries.
+Software using the Public Suffix List will be able to determine where
+cookies may and may not be set, protecting the user from being
+tracked across sites.
+
+This package includes a DAFSA representation of the Public Suffix List
+for runtime loading.</description>
+      </application>
+      <application>
+        <name>python-pip-wheel</name>
+        <version>22.0.4</version>
+        <release>2.fc37</release>
+        <arch>noarch</arch>
+        <url>https://pip.pypa.io/</url>
+        <summary>The pip wheel</summary>
+        <description>A Python wheel of pip to use with venv.</description>
+      </application>
+      <application>
+        <name>python-setuptools-wheel</name>
+        <version>60.9.3</version>
+        <release>2.fc37</release>
+        <arch>noarch</arch>
+        <url>https://pypi.python.org/pypi/setuptools</url>
+        <summary>The setuptools wheel</summary>
+        <description>A Python wheel of setuptools to use with venv.</description>
+      </application>
+      <application>
+        <name>python-unversioned-command</name>
+        <version>3.10.4</version>
+        <release>1.fc37</release>
+        <arch>noarch</arch>
+        <url>https://www.python.org/</url>
+        <summary>The &quot;python&quot; command that runs Python 3</summary>
+        <description>This package contains /usr/bin/python - the &quot;python&quot; command that runs Python 3.</description>
+      </application>
+      <application>
+        <name>python3</name>
+        <version>3.10.4</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.python.org/</url>
+        <summary>Python 3.10 interpreter</summary>
+        <description>Python 3.10 is an accessible, high-level, dynamically typed, interpreted
+programming language, designed with an emphasis on code readability.
+It includes an extensive standard library, and has a vast ecosystem of
+third-party libraries.
+
+The python3 package provides the &quot;python3&quot; executable: the reference
+interpreter for the Python language, version 3.
+The majority of its standard library is provided in the python3-libs package,
+which should be installed automatically along with python3.
+The remaining parts of the Python standard library are broken out into the
+python3-tkinter and python3-test packages, which may need to be installed
+separately.
+
+Documentation for Python is provided in the python3-docs package.
+
+Packages containing additional libraries for Python are generally named with
+the &quot;python3-&quot; prefix.</description>
+      </application>
+      <application>
+        <name>python3-libs</name>
+        <version>3.10.4</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.python.org/</url>
+        <summary>Python runtime libraries</summary>
+        <description>This package contains runtime libraries for use by Python:
+- the majority of the Python standard library
+- a dynamically linked library for use by applications that embed Python as
+  a scripting language, and by the main &quot;python3&quot; executable</description>
+      </application>
+      <application>
+        <name>qrencode-libs</name>
+        <version>4.1.1</version>
+        <release>2.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://fukuchi.org/works/qrencode/</url>
+        <summary>QR Code encoding library - Shared libraries</summary>
+        <description>The qrencode-libs package contains the shared libraries and header files for
+applications that use qrencode.</description>
+      </application>
+      <application>
+        <name>readline</name>
+        <version>8.1</version>
+        <release>6.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://tiswww.case.edu/php/chet/readline/rltop.html</url>
+        <summary>A library for editing typed command lines</summary>
+        <description>The Readline library provides a set of functions that allow users to
+edit command lines. Both Emacs and vi editing modes are available. The
+Readline library includes additional functions for maintaining a list
+of previously-entered command lines for recalling or editing those
+lines, and for performing csh-like history expansion on previous
+commands.</description>
+      </application>
+      <application>
+        <name>rpm</name>
+        <version>4.18.0</version>
+        <release>0.alpha2.1.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://www.rpm.org/</url>
+        <summary>The RPM package management system</summary>
+        <description>The RPM Package Manager (RPM) is a powerful command line driven
+package management system capable of installing, uninstalling,
+verifying, querying, and updating software packages. Each software
+package consists of an archive of files along with information about
+the package like its version, a description, etc.</description>
+      </application>
+      <application>
+        <name>rpm-libs</name>
+        <version>4.18.0</version>
+        <release>0.alpha2.1.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://www.rpm.org/</url>
+        <summary>Libraries for manipulating RPM packages</summary>
+        <description>This package contains the RPM shared libraries.</description>
+      </application>
+      <application>
+        <name>sed</name>
+        <version>4.8</version>
+        <release>10.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://sed.sourceforge.net/</url>
+        <summary>A GNU stream text editor</summary>
+        <description>The sed (Stream EDitor) editor is a stream or batch (non-interactive)
+editor.  Sed takes text as input, performs an operation or set of
+operations on the text and outputs the modified text.  The operations
+that sed performs (substitutions, deletions, insertions, etc.) can be
+specified in a script file or from the command line.</description>
+      </application>
+      <application>
+        <name>setup</name>
+        <version>2.13.10</version>
+        <release>1.fc37</release>
+        <arch>noarch</arch>
+        <url>https://pagure.io/setup/</url>
+        <summary>A set of system configuration and setup files</summary>
+        <description>The setup package contains a set of important system configuration and
+setup files, such as passwd, group, and profile.</description>
+      </application>
+      <application>
+        <name>shadow-utils</name>
+        <epoch>2</epoch>
+        <version>4.11.1</version>
+        <release>2.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/shadow-maint/shadow</url>
+        <summary>Utilities for managing accounts and shadow password files</summary>
+        <description>The shadow-utils package includes the necessary programs for
+converting UNIX password files to the shadow password format, plus
+programs for managing user and group accounts. The pwconv command
+converts passwords to the shadow password format. The pwunconv command
+unconverts shadow passwords and generates a passwd file (a standard
+UNIX password file). The pwck command checks the integrity of password
+and shadow files. The lastlog command prints out the last login times
+for all users. The useradd, userdel, and usermod commands are used for
+managing user accounts. The groupadd, groupdel, and groupmod commands
+are used for managing group accounts.</description>
+      </application>
+      <application>
+        <name>sqlite-libs</name>
+        <version>3.38.5</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://www.sqlite.org/</url>
+        <summary>Shared library for the sqlite3 embeddable SQL database engine.</summary>
+        <description>This package contains the shared library for sqlite.</description>
+      </application>
+      <application>
+        <name>systemd</name>
+        <version>251.1</version>
+        <release>2.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.freedesktop.org/wiki/Software/systemd</url>
+        <summary>System and Service Manager</summary>
+        <description>systemd is a system and service manager that runs as PID 1 and starts the rest
+of the system. It provides aggressive parallelization capabilities, uses socket
+and D-Bus activation for starting services, offers on-demand starting of
+daemons, keeps track of processes using Linux control groups, maintains mount
+and automount points, and implements an elaborate transactional dependency-based
+service control logic. systemd supports SysV and LSB init scripts and works as a
+replacement for sysvinit. Other parts of this package are a logging daemon,
+utilities to control basic system configuration like the hostname, date, locale,
+maintain a list of logged-in users, system accounts, runtime directories and
+settings, and a logging daemons.
+
+This package was built from the 251.1-stable branch of systemd.</description>
+      </application>
+      <application>
+        <name>systemd-libs</name>
+        <version>251.1</version>
+        <release>2.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.freedesktop.org/wiki/Software/systemd</url>
+        <summary>systemd libraries</summary>
+        <description>Libraries for systemd and udev.</description>
+      </application>
+      <application>
+        <name>systemd-networkd</name>
+        <version>251.1</version>
+        <release>2.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.freedesktop.org/wiki/Software/systemd</url>
+        <summary>System daemon that manages network configurations</summary>
+        <description>systemd-networkd is a system service that manages networks. It detects and
+configures network devices as they appear, as well as creating virtual network
+devices.</description>
+      </application>
+      <application>
+        <name>systemd-pam</name>
+        <version>251.1</version>
+        <release>2.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.freedesktop.org/wiki/Software/systemd</url>
+        <summary>systemd PAM module</summary>
+        <description>Systemd PAM module registers the session with systemd-logind.</description>
+      </application>
+      <application>
+        <name>systemd-resolved</name>
+        <version>251.1</version>
+        <release>2.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.freedesktop.org/wiki/Software/systemd</url>
+        <summary>Network Name Resolution manager</summary>
+        <description>systemd-resolved is a system service that provides network name resolution to
+local applications. It implements a caching and validating DNS/DNSSEC stub
+resolver, as well as an LLMNR and MulticastDNS resolver and responder.</description>
+      </application>
+      <application>
+        <name>systemd-udev</name>
+        <version>251.1</version>
+        <release>2.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.freedesktop.org/wiki/Software/systemd</url>
+        <summary>Rule-based device node and kernel event manager</summary>
+        <description>This package contains systemd-udev and the rules and hardware database needed to
+manage device nodes. This package is necessary on physical machines and in
+virtual machines, but not in containers.
+
+This package also provides systemd-timesyncd, a network time protocol daemon.
+
+It also contains tools to manage encrypted home areas and secrets bound to the
+machine, and to create or grow partitions and make file systems automatically.</description>
+      </application>
+      <application>
+        <name>tpm2-tss</name>
+        <version>3.2.0</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/tpm2-software/tpm2-tss</url>
+        <summary>TPM2.0 Software Stack</summary>
+        <description>tpm2-tss is a software stack supporting Trusted Platform Module(TPM) 2.0 system
+APIs. It sits between TPM driver and applications, providing TPM2.0 specified
+APIs for applications to access TPM module through kernel TPM drivers.</description>
+      </application>
+      <application>
+        <name>tzdata</name>
+        <version>2022a</version>
+        <release>1.fc37</release>
+        <arch>noarch</arch>
+        <url>https://www.iana.org/time-zones</url>
+        <summary>Timezone data</summary>
+        <description>This package contains data files with rules for various timezones around
+the world.</description>
+      </application>
+      <application>
+        <name>util-linux</name>
+        <version>2.38</version>
+        <release>3.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://en.wikipedia.org/wiki/Util-linux</url>
+        <summary>Collection of basic system utilities</summary>
+        <description>The util-linux package contains a large variety of low-level system
+utilities that are necessary for a Linux system to function. Among
+others, util-linux contains the fdisk configuration tool and the login
+program.</description>
+      </application>
+      <application>
+        <name>util-linux-core</name>
+        <version>2.38</version>
+        <release>3.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://en.wikipedia.org/wiki/Util-linux</url>
+        <summary>The most essential utilities from the util-linux suite</summary>
+        <description>This is a very basic set of Linux utilities that is necessary on
+minimal installations.</description>
+      </application>
+      <application>
+        <name>whois-nls</name>
+        <version>5.5.13</version>
+        <release>1.fc37</release>
+        <arch>noarch</arch>
+        <url>http://www.linux.it/~md/software/</url>
+        <summary>Gettext catalogs for whois tools</summary>
+        <description>whois tools messages translated into different natural languages.</description>
+      </application>
+      <application>
+        <name>xkeyboard-config</name>
+        <version>2.35.1</version>
+        <release>1.fc37</release>
+        <arch>noarch</arch>
+        <url>http://www.freedesktop.org/wiki/Software/XKeyboardConfig</url>
+        <summary>X Keyboard Extension configuration data</summary>
+        <description>This package contains configuration data used by the X Keyboard Extension (XKB),
+which allows selection of keyboard layouts when using a graphical interface.</description>
+      </application>
+      <application>
+        <name>xz</name>
+        <version>5.2.5</version>
+        <release>9.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://tukaani.org/xz/</url>
+        <summary>LZMA compression utilities</summary>
+        <description>XZ Utils are an attempt to make LZMA compression easy to use on free (as in
+freedom) operating systems. This is achieved by providing tools and libraries
+which are similar to use than the equivalents of the most popular existing
+compression algorithms.
+
+LZMA is a general purpose compression algorithm designed by Igor Pavlov as
+part of 7-Zip. It provides high compression ratio while keeping the
+decompression speed fast.</description>
+      </application>
+      <application>
+        <name>xz-libs</name>
+        <version>5.2.5</version>
+        <release>9.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://tukaani.org/xz/</url>
+        <summary>Libraries for decoding LZMA compression</summary>
+        <description>Libraries for decoding files compressed with LZMA or XZ utils.</description>
+      </application>
+      <application>
+        <name>zlib</name>
+        <version>1.2.11</version>
+        <release>31.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://www.zlib.net/</url>
+        <summary>Compression and decompression library</summary>
+        <description>Zlib is a general-purpose, patent-free, lossless data compression
+library which is used by many different programs.</description>
       </application>
     </applications>
   </operatingsystem>
index 72cddaf8816dd61e7ba6f515e557e916dc302a49..f9ed235c406adc874ea9bd235ea23bba18ffb7f1 100644 (file)
       </filesystem>
     </filesystems>
     <applications>
+      <application>
+        <name>alternatives</name>
+        <version>1.19</version>
+        <release>2.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/fedora-sysv/chkconfig</url>
+        <summary>A tool to maintain symbolic links determining default commands</summary>
+        <description>alternatives creates, removes, maintains and displays information about the
+symbolic links comprising the alternatives system. It is possible for several
+programs fulfilling the same or similar functions to be installed on a single
+system at the same time.</description>
+      </application>
+      <application>
+        <name>audit-libs</name>
+        <version>3.0.8</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://people.redhat.com/sgrubb/audit/</url>
+        <summary>Dynamic library for libaudit</summary>
+        <description>The audit-libs package contains the dynamic libraries needed for
+applications to use the audit framework.</description>
+      </application>
+      <application>
+        <name>authselect</name>
+        <version>1.4.0</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/authselect/authselect</url>
+        <summary>Configures authentication and identity sources from supported profiles</summary>
+        <description>Authselect is designed to be a replacement for authconfig but it takes
+a different approach to configure the system. Instead of letting
+the administrator build the PAM stack with a tool (which may potentially
+end up with a broken configuration), it would ship several tested stacks
+(profiles) that solve a use-case and are well tested and supported.
+At the same time, some obsolete features of authconfig are not
+supported by authselect.</description>
+      </application>
+      <application>
+        <name>authselect-libs</name>
+        <version>1.4.0</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/authselect/authselect</url>
+        <summary>Utility library used by the authselect tool</summary>
+        <description>Common library files for authselect. This package is used by the authselect
+command line tool and any other potential front-ends.</description>
+      </application>
       <application>
         <name>basesystem</name>
         <version>11</version>
-        <release>10.fc33</release>
+        <release>13.fc36</release>
         <arch>noarch</arch>
         <url>(none)</url>
         <summary>The skeleton package which defines a simple Fedora system</summary>
@@ -43,8 +90,8 @@ should never be removed.</description>
       </application>
       <application>
         <name>bash</name>
-        <version>5.0.17</version>
-        <release>2.fc33</release>
+        <version>5.1.16</version>
+        <release>2.fc36</release>
         <arch>x86_64</arch>
         <url>https://www.gnu.org/software/bash</url>
         <summary>The GNU Bourne Again shell</summary>
@@ -52,11 +99,307 @@ should never be removed.</description>
 interpreter that is compatible with the Bourne shell (sh). Bash
 incorporates useful features from the Korn shell (ksh) and the C shell
 (csh). Most sh scripts can be run by bash without modification.</description>
+      </application>
+      <application>
+        <name>bzip2-libs</name>
+        <version>1.0.8</version>
+        <release>11.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://www.bzip.org/</url>
+        <summary>Libraries for applications using bzip2</summary>
+        <description>Libraries for applications using the bzip2 compression format.</description>
+      </application>
+      <application>
+        <name>ca-certificates</name>
+        <version>2021.2.52</version>
+        <release>3.fc36</release>
+        <arch>noarch</arch>
+        <url>https://fedoraproject.org/wiki/CA-Certificates</url>
+        <summary>The Mozilla CA root certificate bundle</summary>
+        <description>This package contains the set of CA certificates chosen by the
+Mozilla Foundation for use with the Internet PKI.</description>
+      </application>
+      <application>
+        <name>coreutils</name>
+        <version>9.1</version>
+        <release>2.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.gnu.org/software/coreutils/</url>
+        <summary>A set of basic GNU tools commonly used in shell scripts</summary>
+        <description>These are the GNU core utilities.  This package is the combination of
+the old GNU fileutils, sh-utils, and textutils packages.</description>
+      </application>
+      <application>
+        <name>coreutils-common</name>
+        <version>9.1</version>
+        <release>2.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.gnu.org/software/coreutils/</url>
+        <summary>coreutils common optional components</summary>
+        <description>Optional though recommended components,
+including documentation and translations.</description>
+      </application>
+      <application>
+        <name>cpio</name>
+        <version>2.13</version>
+        <release>12.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://www.gnu.org/software/cpio/</url>
+        <summary>A GNU archiving program</summary>
+        <description>GNU cpio copies files into or out of a cpio or tar archive.  Archives
+are files which contain a collection of other files plus information
+about them, such as their file name, owner, timestamps, and access
+permissions.  The archive can be another file on the disk, a magnetic
+tape, or a pipe.  GNU cpio supports the following archive formats:  binary,
+old ASCII, new ASCII, crc, HPUX binary, HPUX old ASCII, old tar and POSIX.1
+tar.  By default, cpio creates binary format archives, so that they are
+compatible with older cpio programs.  When it is extracting files from
+archives, cpio automatically recognizes which kind of archive it is reading
+and can read archives created on machines with a different byte-order.
+
+Install cpio if you need a program to manage file archives.</description>
+      </application>
+      <application>
+        <name>cracklib</name>
+        <version>2.9.6</version>
+        <release>28.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://sourceforge.net/projects/cracklib/</url>
+        <summary>A password-checking library</summary>
+        <description>CrackLib tests passwords to determine whether they match certain
+security-oriented characteristics, with the purpose of stopping users
+from choosing passwords that are easy to guess. CrackLib performs
+several tests on passwords: it tries to generate words from a username
+and gecos entry and checks those words against the password; it checks
+for simplistic patterns in passwords; and it checks for the password
+in a dictionary.
+
+CrackLib is actually a library containing a particular C function
+which is used to check the password, as well as other C
+functions. CrackLib is not a replacement for a passwd program; it must
+be used in conjunction with an existing passwd program.
+
+Install the cracklib package if you need a program to check users'
+passwords to see if they are at least minimally secure. If you install
+CrackLib, you will also want to install the cracklib-dicts package.</description>
+      </application>
+      <application>
+        <name>crypto-policies</name>
+        <version>20220428</version>
+        <release>1.gitdfb10ea.fc37</release>
+        <arch>noarch</arch>
+        <url>https://gitlab.com/redhat-crypto/fedora-crypto-policies</url>
+        <summary>System-wide crypto policies</summary>
+        <description>This package provides pre-built configuration files with
+cryptographic policies for various cryptographic back-ends,
+such as SSL/TLS libraries.</description>
+      </application>
+      <application>
+        <name>crypto-policies-scripts</name>
+        <version>20220428</version>
+        <release>1.gitdfb10ea.fc37</release>
+        <arch>noarch</arch>
+        <url>https://gitlab.com/redhat-crypto/fedora-crypto-policies</url>
+        <summary>Tool to switch between crypto policies</summary>
+        <description>This package provides a tool update-crypto-policies, which applies
+the policies provided by the crypto-policies package. These can be
+either the pre-built policies from the base package or custom policies
+defined in simple policy definition files.
+
+The package also provides a tool fips-mode-setup, which can be used
+to enable or disable the system FIPS mode.</description>
+      </application>
+      <application>
+        <name>cryptsetup-libs</name>
+        <version>2.4.3</version>
+        <release>2.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://gitlab.com/cryptsetup/cryptsetup</url>
+        <summary>Cryptsetup shared library</summary>
+        <description>This package contains the cryptsetup shared library, libcryptsetup.</description>
+      </application>
+      <application>
+        <name>curl</name>
+        <version>7.83.1</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://curl.se/</url>
+        <summary>A utility for getting files from remote servers (FTP, HTTP, and others)</summary>
+        <description>curl is a command line tool for transferring data with URL syntax, supporting
+FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, LDAP, LDAPS, FILE, IMAP,
+SMTP, POP3 and RTSP.  curl supports SSL certificates, HTTP POST, HTTP PUT, FTP
+uploading, HTTP form based upload, proxies, cookies, user+password
+authentication (Basic, Digest, NTLM, Negotiate, kerberos...), file transfer
+resume, proxy tunneling and a busload of other useful tricks.</description>
+      </application>
+      <application>
+        <name>cyrus-sasl-lib</name>
+        <version>2.1.28</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.cyrusimap.org/sasl/</url>
+        <summary>Shared libraries needed by applications which use Cyrus SASL</summary>
+        <description>The cyrus-sasl-lib package contains shared libraries which are needed by
+applications which use the Cyrus SASL library.</description>
+      </application>
+      <application>
+        <name>dbus</name>
+        <epoch>1</epoch>
+        <version>1.14.0</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.freedesktop.org/wiki/Software/dbus/</url>
+        <summary>D-BUS message bus</summary>
+        <description>D-BUS is a system for sending messages between applications. It is
+used both for the system-wide message bus service, and as a
+per-user-login-session messaging facility.</description>
+      </application>
+      <application>
+        <name>dbus-broker</name>
+        <version>31</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/bus1/dbus-broker</url>
+        <summary>Linux D-Bus Message Broker</summary>
+        <description>dbus-broker is an implementation of a message bus as defined by the D-Bus
+specification. Its aim is to provide high performance and reliability, while
+keeping compatibility to the D-Bus reference implementation. It is exclusively
+written for Linux systems, and makes use of many modern features provided by
+recent Linux kernel releases.</description>
+      </application>
+      <application>
+        <name>dbus-common</name>
+        <epoch>1</epoch>
+        <version>1.14.0</version>
+        <release>1.fc37</release>
+        <arch>noarch</arch>
+        <url>https://www.freedesktop.org/wiki/Software/dbus/</url>
+        <summary>D-BUS message bus configuration</summary>
+        <description>The dbus-common package provides the configuration and setup files for D-Bus
+implementations to provide a System and User Message Bus.</description>
+      </application>
+      <application>
+        <name>device-mapper</name>
+        <version>1.02.175</version>
+        <release>7.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://www.sourceware.org/dm/</url>
+        <summary>Device mapper utility</summary>
+        <description>This package contains the supporting userspace utility, dmsetup,
+for the kernel device-mapper.</description>
+      </application>
+      <application>
+        <name>device-mapper-libs</name>
+        <version>1.02.175</version>
+        <release>7.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://sourceware.org/lvm2/</url>
+        <summary>Device-mapper shared library</summary>
+        <description>This package contains the device-mapper shared library, libdevmapper.</description>
+      </application>
+      <application>
+        <name>diffutils</name>
+        <version>3.8</version>
+        <release>2.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://www.gnu.org/software/diffutils/diffutils.html</url>
+        <summary>GNU collection of diff utilities</summary>
+        <description>Diffutils includes four utilities: diff, cmp, diff3 and sdiff. Diff
+compares two files and shows the differences, line by line.  The cmp
+command shows the offset and line numbers where two files differ, or
+cmp can show the characters that differ between the two files.  The
+diff3 command shows the differences between three files.  Diff3 can be
+used when two people have made independent changes to a common
+original; diff3 can produce a merged file that contains both sets of
+changes and warnings about conflicts.  The sdiff command can be used
+to merge two files interactively.
+
+Install diffutils if you need to compare text files.</description>
+      </application>
+      <application>
+        <name>dracut</name>
+        <version>056</version>
+        <release>2.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://dracut.wiki.kernel.org/</url>
+        <summary>Initramfs generator using udev</summary>
+        <description>dracut contains tools to create bootable initramfses for the Linux
+kernel. Unlike other implementations, dracut hard-codes as little
+as possible into the initramfs. dracut contains various modules which
+are driven by the event-based udev. Having root on MD, DM, LVM2, LUKS
+is supported as well as NFS, iSCSI, NBD, FCoE with the dracut-network
+package.</description>
+      </application>
+      <application>
+        <name>elfutils-debuginfod-client</name>
+        <version>0.187</version>
+        <release>4.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://elfutils.org/</url>
+        <summary>Library and command line client for build-id HTTP ELF/DWARF server</summary>
+        <description>The elfutils-debuginfod-client package contains shared libraries
+dynamically loaded from -ldw, which use a debuginfod service
+to look up debuginfo and associated data. Also includes a
+command-line frontend.</description>
+      </application>
+      <application>
+        <name>elfutils-default-yama-scope</name>
+        <version>0.187</version>
+        <release>4.fc37</release>
+        <arch>noarch</arch>
+        <url>http://elfutils.org/</url>
+        <summary>Default yama attach scope sysctl setting</summary>
+        <description>Yama sysctl setting to enable default attach scope settings
+enabling programs to use ptrace attach, access to
+/proc/PID/{mem,personality,stack,syscall}, and the syscalls
+process_vm_readv and process_vm_writev which are used for
+interprocess services, communication and introspection
+(like synchronisation, signaling, debugging, tracing and
+profiling) of processes.</description>
+      </application>
+      <application>
+        <name>elfutils-libelf</name>
+        <version>0.187</version>
+        <release>4.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://elfutils.org/</url>
+        <summary>Library to read and write ELF files</summary>
+        <description>The elfutils-libelf package provides a DSO which allows reading and
+writing ELF files on a high level.  Third party programs depend on
+this package to read internals of ELF files.  The programs of the
+elfutils package use it also to generate new ELF files.</description>
+      </application>
+      <application>
+        <name>elfutils-libs</name>
+        <version>0.187</version>
+        <release>4.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://elfutils.org/</url>
+        <summary>Libraries to handle compiled objects</summary>
+        <description>The elfutils-libs package contains libraries which implement DWARF, ELF,
+and machine-specific ELF handling and process introspection.  These
+libraries are used by the programs in the elfutils package.  The
+elfutils-devel package enables building other programs using these
+libraries.</description>
+      </application>
+      <application>
+        <name>expat</name>
+        <version>2.4.8</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://libexpat.github.io/</url>
+        <summary>An XML parser library</summary>
+        <description>This is expat, the C library for parsing XML, written by James Clark. Expat
+is a stream oriented XML parser. This means that you register handlers with
+the parser prior to starting the parse. These handlers are called when the
+parser discovers the associated structures in the document being parsed. A
+start tag is an example of the kind of structures for which you may
+register handlers.</description>
       </application>
       <application>
         <name>fedora-gpg-keys</name>
-        <version>33</version>
-        <release>3</release>
+        <version>37</version>
+        <release>0.2</release>
         <arch>noarch</arch>
         <url>https://fedoraproject.org/</url>
         <summary>Fedora RPM keys</summary>
@@ -64,8 +407,8 @@ incorporates useful features from the Korn shell (ksh) and the C shell
       </application>
       <application>
         <name>fedora-release</name>
-        <version>33</version>
-        <release>3</release>
+        <version>37</version>
+        <release>0.5</release>
         <arch>noarch</arch>
         <url>https://fedoraproject.org/</url>
         <summary>Fedora release files</summary>
@@ -74,8 +417,8 @@ and systemd preset files that determine which services are enabled by default.</
       </application>
       <application>
         <name>fedora-release-common</name>
-        <version>33</version>
-        <release>3</release>
+        <version>37</version>
+        <release>0.5</release>
         <arch>noarch</arch>
         <url>https://fedoraproject.org/</url>
         <summary>Fedora release files</summary>
@@ -83,8 +426,8 @@ and systemd preset files that determine which services are enabled by default.</
       </application>
       <application>
         <name>fedora-release-identity-basic</name>
-        <version>33</version>
-        <release>3</release>
+        <version>37</version>
+        <release>0.5</release>
         <arch>noarch</arch>
         <url>https://fedoraproject.org/</url>
         <summary>Package providing the basic Fedora identity</summary>
@@ -93,17 +436,48 @@ itself as a particular Edition or Spin.</description>
       </application>
       <application>
         <name>fedora-repos</name>
-        <version>33</version>
-        <release>3</release>
+        <version>37</version>
+        <release>0.2</release>
         <arch>noarch</arch>
         <url>https://fedoraproject.org/</url>
         <summary>Fedora package repositories</summary>
         <description>Fedora package repository files for yum and dnf along with gpg public keys.</description>
       </application>
+      <application>
+        <name>fedora-repos-rawhide</name>
+        <version>37</version>
+        <release>0.2</release>
+        <arch>noarch</arch>
+        <url>https://fedoraproject.org/</url>
+        <summary>Rawhide repo definitions</summary>
+        <description>This package provides the rawhide repo definitions.</description>
+      </application>
+      <application>
+        <name>file</name>
+        <version>5.41</version>
+        <release>5.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.darwinsys.com/file/</url>
+        <summary>Utility for determining file types</summary>
+        <description>The file command is used to identify a particular file according to the
+type of data contained by the file.  File can identify many different
+file types, including ELF binaries, system libraries, RPM packages, and
+different graphics formats.</description>
+      </application>
+      <application>
+        <name>file-libs</name>
+        <version>5.41</version>
+        <release>5.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.darwinsys.com/file/</url>
+        <summary>Libraries for applications using libmagic</summary>
+        <description>
+Libraries for applications using libmagic.</description>
+      </application>
       <application>
         <name>filesystem</name>
-        <version>3.14</version>
-        <release>3.fc33</release>
+        <version>3.16</version>
+        <release>2.fc36</release>
         <arch>x86_64</arch>
         <url>https://pagure.io/filesystem</url>
         <summary>The basic directory layout for a Linux system</summary>
@@ -112,10 +486,100 @@ on a Linux system. Filesystem contains the basic directory layout
 for a Linux operating system, including the correct permissions for
 the directories.</description>
       </application>
+      <application>
+        <name>findutils</name>
+        <epoch>1</epoch>
+        <version>4.9.0</version>
+        <release>1.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://www.gnu.org/software/findutils/</url>
+        <summary>The GNU versions of find utilities (find and xargs)</summary>
+        <description>The findutils package contains programs which will help you locate
+files on your system.  The find utility searches through a hierarchy
+of directories looking for files which match a certain set of criteria
+(such as a file name pattern).  The xargs utility builds and executes
+command lines from standard input arguments (usually lists of file
+names generated by the find command).
+
+You should install findutils because it includes tools that are very
+useful for finding things on your system.</description>
+      </application>
+      <application>
+        <name>fuse-libs</name>
+        <version>2.9.9</version>
+        <release>14.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://fuse.sf.net</url>
+        <summary>File System in Userspace (FUSE) v2 libraries</summary>
+        <description>Devel With FUSE it is possible to implement a fully functional filesystem in a
+userspace program. This package contains the FUSE v2 libraries.</description>
+      </application>
+      <application>
+        <name>gawk</name>
+        <version>5.1.1</version>
+        <release>3.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.gnu.org/software/gawk/</url>
+        <summary>The GNU version of the AWK text processing utility</summary>
+        <description>The gawk package contains the GNU version of AWK text processing utility. AWK is
+a programming language designed for text processing and typically used as a data
+extraction and reporting tool.
+
+The gawk utility can be used to do quick and easy text pattern matching,
+extracting or reformatting. It is considered to be a standard Linux tool for
+text processing.</description>
+      </application>
+      <application>
+        <name>gawk-all-langpacks</name>
+        <version>5.1.1</version>
+        <release>3.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.gnu.org/software/gawk/</url>
+        <summary>Additional localisation files for gawk utility</summary>
+        <description>The base package of gawk supports only the english localisation. This subpackage
+contains additional localisation files.</description>
+      </application>
+      <application>
+        <name>gdbm-libs</name>
+        <epoch>1</epoch>
+        <version>1.22</version>
+        <release>2.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://www.gnu.org/software/gdbm/</url>
+        <summary>Libraries files for gdbm</summary>
+        <description>Libraries for the Gdbm GNU database indexing library</description>
+      </application>
+      <application>
+        <name>gettext</name>
+        <version>0.21</version>
+        <release>13.fc37.0.20220203</release>
+        <arch>x86_64</arch>
+        <url>https://www.gnu.org/software/gettext/</url>
+        <summary>GNU libraries and utilities for producing multi-lingual messages</summary>
+        <description>The GNU gettext package provides a set of tools and documentation for
+producing multi-lingual messages in programs. Tools include a set of
+conventions about how programs should be written to support message
+catalogs, a directory and file naming organization for the message
+catalogs, a runtime library which supports the retrieval of translated
+messages, and stand-alone programs for handling the translatable and
+the already translated strings. Gettext provides an easy to use
+library and tools for creating, using, and modifying natural language
+catalogs and is a powerful and simple method for internationalizing
+programs.</description>
+      </application>
+      <application>
+        <name>gettext-libs</name>
+        <version>0.21</version>
+        <release>13.fc37.0.20220203</release>
+        <arch>x86_64</arch>
+        <url>https://www.gnu.org/software/gettext/</url>
+        <summary>Libraries for gettext</summary>
+        <description>This package contains libraries used internationalization support.</description>
+      </application>
       <application>
         <name>glibc</name>
-        <version>2.32</version>
-        <release>4.fc33</release>
+        <version>2.35.9000</version>
+        <release>20.fc37</release>
         <arch>x86_64</arch>
         <url>http://www.gnu.org/software/glibc/</url>
         <summary>The GNU libc libraries</summary>
@@ -127,115 +591,1670 @@ contains the most important sets of shared libraries: the standard C
 library and the standard math library. Without these two libraries, a
 Linux system will not function.</description>
       </application>
-      <application>
-        <name>glibc-all-langpacks</name>
-        <version>2.32</version>
-        <release>4.fc33</release>
-        <arch>x86_64</arch>
-        <url>http://www.gnu.org/software/glibc/</url>
-        <summary>All language packs for glibc.</summary>
-      </application>
       <application>
         <name>glibc-common</name>
-        <version>2.32</version>
-        <release>4.fc33</release>
+        <version>2.35.9000</version>
+        <release>20.fc37</release>
         <arch>x86_64</arch>
         <url>http://www.gnu.org/software/glibc/</url>
         <summary>Common binaries and locale data for glibc</summary>
         <description>The glibc-common package includes common binaries for the GNU libc
 libraries, as well as national language (locale) support.</description>
+      </application>
+      <application>
+        <name>glibc-gconv-extra</name>
+        <version>2.35.9000</version>
+        <release>20.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://www.gnu.org/software/glibc/</url>
+        <summary>All iconv converter modules for glibc.</summary>
+        <description>This package contains all iconv converter modules built in glibc.</description>
+      </application>
+      <application>
+        <name>glibc-minimal-langpack</name>
+        <version>2.35.9000</version>
+        <release>20.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://www.gnu.org/software/glibc/</url>
+        <summary>Minimal language packs for glibc.</summary>
+        <description>This is a Meta package that is used to install minimal language packs.
+This package ensures you can use C, POSIX, or C.UTF-8 locales, but
+nothing else. It is designed for assembling a minimal system.</description>
+      </application>
+      <application>
+        <name>gmp</name>
+        <epoch>1</epoch>
+        <version>6.2.1</version>
+        <release>2.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://gmplib.org/</url>
+        <summary>GNU arbitrary precision library</summary>
+        <description>The gmp package contains GNU MP, a library for arbitrary precision
+arithmetic, signed integers operations, rational numbers and floating
+point numbers. GNU MP is designed for speed, for both small and very
+large operands. GNU MP is fast because it uses fullwords as the basic
+arithmetic type, it uses fast algorithms, it carefully optimizes
+assembly code for many CPUs' most common inner loops, and it generally
+emphasizes speed over simplicity/elegance in its operations.
+
+Install the gmp package if you need a fast arbitrary precision
+library.</description>
       </application>
       <application>
         <name>gpg-pubkey</name>
-        <version>9570ff31</version>
-        <release>5e3006fb</release>
+        <version>eb10b464</version>
+        <release>6202d9c6</release>
         <arch>(none)</arch>
         <url>(none)</url>
-        <summary>Fedora (33) &lt;fedora-33-primary@fedoraproject.org&gt; public key</summary>
+        <summary>Fedora (38) &lt;fedora-38-primary@fedoraproject.org&gt; public key</summary>
         <description>-----BEGIN PGP PUBLIC KEY BLOCK-----
-Version: rpm-4.16.1.2 (NSS-3)
-
-mQINBF4wBvsBEADQmcGbVUbDRUoXADReRmOOEMeydHghtKC9uRs9YNpGYZIB+bie
-bGYZmflQayfh/wEpO2W/IZfGpHPL42V7SbyvqMjwNls/fnXsCtf4LRofNK8Qd9fN
-kYargc9R7BEz/mwXKMiRQVx+DzkmqGWy2gq4iD0/mCyf5FdJCE40fOWoIGJXaOI1
-Tz1vWqKwLS5T0dfmi9U4Tp/XsKOZGvN8oi5h0KmqFk7LEZr1MXarhi2Va86sgxsF
-QcZEKfu5tgD0r00vXzikoSjn3qA5JW5FW07F1pGP4bF5f9J3CZbQyOjTSWMmmfTm
-2d2BURWzaDiJN9twY2yjzkoOMuPdXXvovg7KxLcQerKT+FbKbq8DySJX2rnOA77k
-UG4c9BGf/L1uBkAT8dpHLk6Uf5BfmypxUkydSWT1xfTDnw1MqxO0MsLlAHOR3J7c
-oW9kLcOLuCQn1hBEwfZv7VSWBkGXSmKfp0LLIxAFgRtv+Dh+rcMMRdJgKr1V3FU+
-rZ1+ZAfYiBpQJFPjv70vx+rGEgS801D3PJxBZUEy4Ic4ZYaKNhK9x9PRQuWcIBuW
-6eTe/6lKWZeyxCumLLdiS75mF2oTcBaWeoc3QxrPRV15eDKeYJMbhnUai/7lSrhs
-EWCkKR1RivgF4slYmtNE5ZPGZ/d61zjwn2xi4xNJVs8q9WRPMpHp0vCyMwARAQAB
-tDFGZWRvcmEgKDMzKSA8ZmVkb3JhLTMzLXByaW1hcnlAZmVkb3JhcHJvamVjdC5v
-cmc+iQI4BBMBAgAiBQJeMAb7AhsPBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAK
-CRBJ/XdJlXD/MZm2D/9kriL43vd3+0DNMeA82n2v9mSR2PQqKny39xNlYPyy/1yZ
-P/KXoa4NYSCA971LSd7lv4n/h5bEKgGHxZfttfOzOnWMVSSTfjRyM/df/NNzTUEV
-7ORA5GW18g8PEtS7uRxVBf3cLvWu5q+8jmqES5HqTAdGVcuIFQeBXFN8Gy1Jinuz
-AH8rJSdkUeZ0cehWbERq80BWM9dhad5dW+/+Gv0foFBvP15viwhWqajr8V0B8es+
-2/tHI0k86FAujV5i0rrXl5UOoLilO57QQNDZH/qW9GsHwVI+2yecLstpUNLq+EZC
-GqTZCYoxYRpl0gAMbDLztSL/8Bc0tJrCRG3tavJotFYlgUK60XnXlQzRkh9rgsfT
-EXbQifWdQMMogzjCJr0hzJ+V1d0iozdUxB2ZEgTjukOvatkB77DY1FPZRkSFIQs+
-fdcjazDIBLIxwJu5QwvTNW8lOLnJ46g4sf1WJoUdNTbR0BaC7HHj1inVWi0p7IuN
-66EPGzJOSjLK+vW+J0ncPDEgLCV74RF/0nR5fVTdrmiopPrzFuguHf9S9gYI3Zun
-Yl8FJUu4kRO6JPPTicUXWX+8XZmE94aK14RCJL23nOSi8T1eW8JLW43dCBRO8QUE
-Aso1t2pypm/1zZexJdOV8yGME3g5l2W6PLgpz58DBECgqc/kda+VWgEAp7rO2A==
-=EPL3
+Version: rpm-4.17.0 (NSS-3)
+
+mQINBGIC2cYBEADJye1aE0AR17qwj6wsHWlCQlcihmqkL8s4gbOk1IevBbH4iXJx
+lu6bN+NhTcCCX6eHmaL5Pwb/bpkMmLR+/r1D2cLDK24YzvN6kJnwRQUTf2dbqYmg
+mNBgIMm+kAabBZPwUHUzyQ9CT/WJpYr1OYu8JIkdxF35nrPewnnOUUqxqbi8fXRQ
+gskSLF8UveiOjFIqmWwlPwT1UtnevAaF80UGQlkwFvqjjh4b9vKY2gHMAQwt+wg5
+HFFCSwSrnd88ZoDb3pKvDMeurYUiPzF5f2r+ziVkMuaSNckvp58uge7HvyqQPAdJ
+ZRswCCxhUAo9VqkNfB4Ud25ASyalk9jOE3HB8E35gFfPXvuX1n15THXNcwMEiybk
+Omne2YwXL8ShGNr5otjqywThMrrqcl2g/pJVTcpDHTR5Hn9YRp+GHlYLjyEr+/x7
+xM19y9ca9GUiJqDbEREHcKKIhYiGmcIjjcJvei/3C/aM4pqeGFJBbVSnw3qeMxH/
+6ArAMA1sAdShCkv2YjlcF0r4uoCjXdS3xrKLz9PSCquot7RySnOE9TZ7flfJll7Z
+q+lNaSeJg7FK8VWSUb9Lit6VEYVbzWKzespDDbujrHbFpydyq8gXurk7bSR2w0te
+gsmytQqT/w1z2bydgGF6SfY9Px0wuA8GQKr48l5Bhdc6+vHHFqPKzz0PVQARAQAB
+tDFGZWRvcmEgKDM4KSA8ZmVkb3JhLTM4LXByaW1hcnlAZmVkb3JhcHJvamVjdC5v
+cmc+iQJOBBMBCAA4FiEEalG7q7o9VGe2FxIhgJqNfOsQtGQFAmIC2cYCGw8FCwkI
+BwIGFQoJCAsCBBYCAwECHgECF4AACgkQgJqNfOsQtGScyw/7BLmD4Fwi4QZY94zl
+vlJdNufZRavOemSIVVDHoCr8pQBAdrvoMypxJd5zM4ODIqFsjdYpFti+Tkeq4/4U
+25UoLPEOtU8UDt2uq7LqfdCxspaj7VyXAJIkpf7wEvLS4Jzo+YaMIlsd0dCrMXTM
+vhu4gKpBFW6C+gGlmuDyTJbyrf7ilytgVzVtIfRrT7XffylviIlZHwKm43UDjvzX
+YEl3EAFR1RjATwXMy2aJh7GCNsz+fKs+7YRKQUhpMF5un/2pyNJO+LbVGGwGZvga
+K9Kfsg/4r1ync4nDDD1dadKIHhobDeiJ9uZLoBvvVDz7Ywu7q/vv4zIPxstYBNq4
+6fLKDtYXuJCK0EV9Qy4ox67t0UGlaRGH8y5YUqOI10xH7iQej0xWlSc8w2dKhPz8
+z9XLv2OMK+PvqvflhFHhWkqEoQRqTu0TVD0fLLe4lqieJlqZcJqW0F9G/vNSSWmf
+POLa/Nim71gL2fPjCJOIRV4K/cJSyBmu5NchG7dHD5sUtJxZ4TFSuepaBZ8cPK1x
+e26TaCBqoUWgUXWmw+P89aOpYOJYEFfT/VAm2Ywn+c1EFUmD+30wQ7aP/RUFl94z
+n0BjqsWDnCKVFHydZ0TZSpeADmXMg2VYZPcp/cQR1KjoBoDxAscis7b1XPQUg7CB
+zquq5jBVAnsNIhs7g47GWKyDUJM=
+=aCLl
 -----END PGP PUBLIC KEY BLOCK-----
 </description>
       </application>
       <application>
-        <name>libgcc</name>
-        <version>10.2.1</version>
-        <release>9.fc33</release>
+        <name>gpg-pubkey</name>
+        <version>5323552a</version>
+        <release>6112bcdc</release>
+        <arch>(none)</arch>
+        <url>(none)</url>
+        <summary>Fedora (37) &lt;fedora-37-primary@fedoraproject.org&gt; public key</summary>
+        <description>-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: rpm-4.17.0 (NSS-3)
+
+mQINBGESvNwBEAC7HsCDTlugVeDSMFX6aW3zAPFMfvBssNj+89fdmbxcI9t7UY6f
+HvkkGziUET8e+9jB8R2/wXQCGOw1J+sfmwO4aN0LdVQjhKvVNj+F5jWt3m5FAIBa
+OTWS6Kvqw2ECTpH7fD86541eK3BuCni6d5U3PCd73t976FcUmpQ/1AthqMksM0Jz
+cJapvNmLTCR0NZ2XyyLmn/K1hgNXe8G5j0cSrJiY+Zpz5aQkT96j96Jm6W2A+tBI
+icU4n6V4vlj2TxmCumtXJGXGBGJnof/dCgh45aqi+sk5c429ns+5sooYcaEJojj6
+FYSITv10l+az6ZMJz/j61VYSkhMY8hQ4Wd+yL2JVzLE9N9V0L95sX1yEZ5ILmzwx
+oRKe4WHSBE6yMxNWobv7hmC+3ZC5mLPaEDS/g/0xuQj9Sy9eT2mhhFPxOv29YQ+P
+sC3zXHJMMT0tlGd72PVHQQ0JYONfMhcC+7AHGFGz8p4/wor2jIFG1ouqE6Lfzm8o
+XWZMYm3AydlrP/xkYaoWNE3jL/+dskSBr/Yz7ZzlkAqH9lb1HKnXQLTrw6gz6pmI
+KufSDXjEFNxnFI/9gMlshJtk5+QSDzezmxFm+NMviSvDUNAVIzrU1D84dauBYph4
+OrJVeECQHEotny/I53AdlVwLYB4TWkObzTs6vtV7Pz1TK2CmHpe3UW72xwARAQAB
+tDFGZWRvcmEgKDM3KSA8ZmVkb3JhLTM3LXByaW1hcnlAZmVkb3JhcHJvamVjdC5v
+cmc+iQJOBBMBCAA4FiEErLXuToMcdLt8Fo0n9VrT+1MjVSoFAmESvNwCGw8FCwkI
+BwIGFQoJCAsCBBYCAwECHgECF4AACgkQ9VrT+1MjVSoPMhAAist7kK/YtcyBL/dt
+P55hPrkJT6Ay+e2Dvt4Pixe4iT32Y3jG12aoX2LY//mxVOOpV+EhXYTTb5aLt2Jj
+a8/qCKJFk7zuCOxa1hgdRcjoR7ZbU0lNjD9mMCax/YT9QafcaMEib/FlknP3g1SN
+GRSKLObTJd6BbtZXCE80JRIX+Dy6+/Oz7LXRXeKpiimhlXT1wuTaqAJEtuHdQvg7
+dkL4DzAJ2FiURVd5gvgo266WaCMafJjFRrSGHJm0c+V+0Z9NsuH80JbPm+rCUh5U
+E9PMyztqlqtldtqc1+aZ1iUbVuXY059BUmlAhmf5sAlBktY+hEabH/4kmfGccbBL
+TyBIn03Y9q9173okZSUe6q16m/hbbWI8dwkSpIADZbGGJbRi8PJpCg9y6KI355qD
+atE2irleoy6eXqpKa+uPTRBk7i/r6jDoA+u+tZyFfcEnwvSWP8cN1j5mNklvITZl
+YF1n5b3fejkZVdOmRZQNkyzMxYEd4UZFQZNYrx0nltAagRS8b5ikqNk2UTl+dyBG
+k9gLOSZhAa2JdmAqwe9rT69jaa4kZMLlxPPC3246s83t0s7lp7vF+zLPfPSvxpsU
+tg+fuT+OFKWYdBFF7VkEA+wezHAznIP6TPyQXbBpkzE889/hOXy4BYs0wy8Bpda/
+Ve2Ba329f99dSCZKImi5DPCxJY4=
+=ZmVd
+-----END PGP PUBLIC KEY BLOCK-----
+</description>
+      </application>
+      <application>
+        <name>grep</name>
+        <version>3.7</version>
+        <release>2.fc36</release>
         <arch>x86_64</arch>
-        <url>http://gcc.gnu.org</url>
-        <summary>GCC version 10 shared support library</summary>
-        <description>This package contains GCC shared support library which is needed
-e.g. for exception handling support.</description>
+        <url>https://www.gnu.org/software/grep/</url>
+        <summary>Pattern matching utilities</summary>
+        <description>The GNU versions of commonly used grep utilities. Grep searches through
+textual input for lines which contain a match to a specified pattern and then
+prints the matching lines. GNU's grep utilities include grep, egrep and fgrep.
+
+GNU grep is needed by many scripts, so it shall be installed on every system.</description>
       </application>
       <application>
-        <name>ncurses-base</name>
-        <version>6.2</version>
-        <release>3.20200222.fc33</release>
+        <name>grub2-common</name>
+        <epoch>1</epoch>
+        <version>2.06</version>
+        <release>41.fc37</release>
         <arch>noarch</arch>
-        <url>https://invisible-island.net/ncurses/ncurses.html</url>
-        <summary>Descriptions of common terminals</summary>
-        <description>This package contains descriptions of common terminals. Other terminal
-descriptions are included in the ncurses-term package.</description>
+        <url>http://www.gnu.org/software/grub/</url>
+        <summary>grub2 common layout</summary>
+        <description>This package provides some directories which are required by various grub2
+subpackages.</description>
       </application>
       <application>
-        <name>ncurses-libs</name>
-        <version>6.2</version>
-        <release>3.20200222.fc33</release>
+        <name>grub2-tools</name>
+        <epoch>1</epoch>
+        <version>2.06</version>
+        <release>41.fc37</release>
         <arch>x86_64</arch>
-        <url>https://invisible-island.net/ncurses/ncurses.html</url>
-        <summary>Ncurses libraries</summary>
-        <description>The curses library routines are a terminal-independent method of
-updating character screens with reasonable optimization.  The ncurses
-(new curses) library is a freely distributable replacement for the
-discontinued 4.4 BSD classic curses library.
+        <url>http://www.gnu.org/software/grub/</url>
+        <summary>Support tools for GRUB.</summary>
+        <description>
+The GRand Unified Bootloader (GRUB) is a highly configurable and
+customizable bootloader with modular architecture.  It supports a rich
+variety of kernel formats, file systems, computer architectures and
+hardware devices.
 
-This package contains the ncurses libraries.</description>
+This subpackage provides tools for support of all platforms.</description>
       </application>
       <application>
-        <name>setup</name>
-        <version>2.13.7</version>
-        <release>2.fc33</release>
-        <arch>noarch</arch>
-        <url>https://pagure.io/setup/</url>
-        <summary>A set of system configuration and setup files</summary>
-        <description>The setup package contains a set of important system configuration and
-setup files, such as passwd, group, and profile.</description>
+        <name>grub2-tools-minimal</name>
+        <epoch>1</epoch>
+        <version>2.06</version>
+        <release>41.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://www.gnu.org/software/grub/</url>
+        <summary>Support tools for GRUB.</summary>
+        <description>
+The GRand Unified Bootloader (GRUB) is a highly configurable and
+customizable bootloader with modular architecture.  It supports a rich
+variety of kernel formats, file systems, computer architectures and
+hardware devices.
+
+This subpackage provides tools for support of all platforms.</description>
       </application>
       <application>
-        <name>tzdata</name>
-        <version>2021a</version>
-        <release>1.fc33</release>
+        <name>grubby</name>
+        <version>8.40</version>
+        <release>60.fc37</release>
+        <arch>x86_64</arch>
+        <url>(none)</url>
+        <summary>Command line tool for updating bootloader configs</summary>
+        <description>This package provides a grubby compatibility script that manages
+BootLoaderSpec files and is meant to be backward compatible with
+the previous grubby tool.</description>
+      </application>
+      <application>
+        <name>gzip</name>
+        <version>1.12</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.gzip.org/</url>
+        <summary>GNU data compression program</summary>
+        <description>The gzip package contains the popular GNU gzip data compression
+program. Gzipped files have a .gz extension.
+
+Gzip should be installed on your system, because it is a
+very commonly used data compression program.</description>
+      </application>
+      <application>
+        <name>json-c</name>
+        <version>0.16</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/json-c/json-c</url>
+        <summary>JSON implementation in C</summary>
+        <description>JSON-C implements a reference counting object model that allows you
+to easily construct JSON objects in C, output them as JSON formatted
+strings and parse JSON formatted strings back into the C representation
+of JSON objects.  It aims to conform to RFC 7159.</description>
+      </application>
+      <application>
+        <name>kbd</name>
+        <version>2.4.0</version>
+        <release>9.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://www.kbd-project.org/</url>
+        <summary>Tools for configuring the console (keyboard, virtual terminals, etc.)</summary>
+        <description>The kbd package contains tools for managing a Linux
+system's console's behavior, including the keyboard, the screen
+fonts, the virtual terminals and font files.</description>
+      </application>
+      <application>
+        <name>kbd-misc</name>
+        <version>2.4.0</version>
+        <release>9.fc36</release>
         <arch>noarch</arch>
-        <url>https://www.iana.org/time-zones</url>
-        <summary>Timezone data</summary>
-        <description>This package contains data files with rules for various timezones around
-the world.</description>
+        <url>http://www.kbd-project.org/</url>
+        <summary>Data for kbd package</summary>
+        <description>The kbd-misc package contains data for kbd package - console fonts,
+keymaps etc. Please note that kbd-misc is not helpful without kbd.</description>
+      </application>
+      <application>
+        <name>kernel</name>
+        <version>5.19.0</version>
+        <release>0.rc1.14.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.kernel.org/</url>
+        <summary>The Linux kernel</summary>
+        <description>The kernel meta package</description>
+      </application>
+      <application>
+        <name>kernel-core</name>
+        <version>5.19.0</version>
+        <release>0.rc1.14.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.kernel.org/</url>
+        <summary>The Linux kernel</summary>
+        <description>The kernel package contains the Linux kernel (vmlinuz), the core of any
+Linux operating system.  The kernel handles the basic functions
+of the operating system: memory allocation, process allocation, device
+input and output, etc.</description>
+      </application>
+      <application>
+        <name>kernel-modules</name>
+        <version>5.19.0</version>
+        <release>0.rc1.14.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.kernel.org/</url>
+        <summary>kernel modules to match the core kernel</summary>
+        <description>This package provides commonly used kernel modules for the core kernel package.</description>
+      </application>
+      <application>
+        <name>keyutils-libs</name>
+        <version>1.6.1</version>
+        <release>4.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://people.redhat.com/~dhowells/keyutils/</url>
+        <summary>Key utilities library</summary>
+        <description>This package provides a wrapper library for the key management facility system
+calls.</description>
+      </application>
+      <application>
+        <name>kmod</name>
+        <version>29</version>
+        <release>7.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://git.kernel.org/pub/scm/utils/kernel/kmod/kmod.git</url>
+        <summary>Linux kernel module management utilities</summary>
+        <description>The kmod package provides various programs needed for automatic
+loading and unloading of modules under 2.6, 3.x, and later kernels, as well
+as other module management programs. Device drivers and filesystems are two
+examples of loaded and unloaded modules.</description>
+      </application>
+      <application>
+        <name>kmod-libs</name>
+        <version>29</version>
+        <release>7.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://git.kernel.org/pub/scm/utils/kernel/kmod/kmod.git</url>
+        <summary>Libraries to handle kernel module loading and unloading</summary>
+        <description>The kmod-libs package provides runtime libraries for any application that
+wishes to load or unload Linux kernel modules from the running system.</description>
+      </application>
+      <application>
+        <name>kpartx</name>
+        <version>0.8.9</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://christophe.varoqui.free.fr/</url>
+        <summary>Partition device manager for device-mapper devices</summary>
+        <description>kpartx manages partition creation and removal for device-mapper devices.</description>
+      </application>
+      <application>
+        <name>krb5-libs</name>
+        <version>1.19.2</version>
+        <release>9.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://web.mit.edu/kerberos/www/</url>
+        <summary>The non-admin shared libraries used by Kerberos 5</summary>
+        <description>Kerberos is a network authentication system. The krb5-libs package
+contains the shared libraries needed by Kerberos 5. If you are using
+Kerberos, you need to install this package.</description>
+      </application>
+      <application>
+        <name>libacl</name>
+        <version>2.3.1</version>
+        <release>3.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://savannah.nongnu.org/projects/acl</url>
+        <summary>Dynamic library for access control list support</summary>
+        <description>This package contains the libacl.so dynamic library which contains
+the POSIX 1003.1e draft standard 17 functions for manipulating access
+control lists.</description>
+      </application>
+      <application>
+        <name>libarchive</name>
+        <version>3.6.1</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.libarchive.org/</url>
+        <summary>A library for handling streaming archive formats</summary>
+        <description>Libarchive is a programming library that can create and read several different
+streaming archive formats, including most popular tar variants, several cpio
+formats, and both BSD and GNU ar variants. It can also write shar archives and
+read ISO9660 CDROM images and ZIP archives.</description>
+      </application>
+      <application>
+        <name>libargon2</name>
+        <version>20171227</version>
+        <release>9.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/P-H-C/phc-winner-argon2</url>
+        <summary>The password-hashing library</summary>
+        <description>Argon2 is a password-hashing function that summarizes the state of the art
+in the design of memory-hard functions and can be used to hash passwords
+for credential storage, key derivation, or other applications.</description>
+      </application>
+      <application>
+        <name>libattr</name>
+        <version>2.5.1</version>
+        <release>4.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://savannah.nongnu.org/projects/attr</url>
+        <summary>Dynamic library for extended attribute support</summary>
+        <description>This package contains the libattr.so dynamic library which contains
+the extended attribute system calls and library functions.</description>
+      </application>
+      <application>
+        <name>libblkid</name>
+        <version>2.38</version>
+        <release>3.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://en.wikipedia.org/wiki/Util-linux</url>
+        <summary>Block device ID library</summary>
+        <description>This is block device identification library, part of util-linux.</description>
+      </application>
+      <application>
+        <name>libbpf</name>
+        <epoch>2</epoch>
+        <version>0.8.0</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/libbpf/libbpf</url>
+        <summary>Libbpf library</summary>
+        <description>A mirror of bpf-next linux tree bpf-next/tools/lib/bpf directory plus its
+supporting header files. The version of the package reflects the version of
+ABI.</description>
+      </application>
+      <application>
+        <name>libbrotli</name>
+        <version>1.0.9</version>
+        <release>7.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/google/brotli</url>
+        <summary>Library for brotli lossless compression algorithm</summary>
+        <description>Brotli is a generic-purpose lossless compression algorithm that compresses
+data using a combination of a modern variant of the LZ77 algorithm, Huffman
+coding and 2nd order context modeling, with a compression ratio comparable
+to the best currently available general-purpose compression methods.
+It is similar in speed with deflate but offers more dense compression.</description>
+      </application>
+      <application>
+        <name>libcap</name>
+        <version>2.48</version>
+        <release>4.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://sites.google.com/site/fullycapable/</url>
+        <summary>Library for getting and setting POSIX.1e capabilities</summary>
+        <description>libcap is a library for getting and setting POSIX.1e (formerly POSIX 6)
+draft 15 capabilities.</description>
+      </application>
+      <application>
+        <name>libcap-ng</name>
+        <version>0.8.3</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://people.redhat.com/sgrubb/libcap-ng/</url>
+        <summary>Alternate posix capabilities library</summary>
+        <description>Libcap-ng is a library that makes using posix capabilities easier</description>
+      </application>
+      <application>
+        <name>libcbor</name>
+        <version>0.7.0</version>
+        <release>5.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://libcbor.org</url>
+        <summary>A CBOR parsing library</summary>
+        <description>libcbor is a C library for parsing and generating CBOR.</description>
+      </application>
+      <application>
+        <name>libcom_err</name>
+        <version>1.46.5</version>
+        <release>2.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://e2fsprogs.sourceforge.net/</url>
+        <summary>Common error description library</summary>
+        <description>This is the common error description library, part of e2fsprogs.
+
+libcom_err is an attempt to present a common error-handling mechanism.</description>
+      </application>
+      <application>
+        <name>libcurl</name>
+        <version>7.83.1</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://curl.se/</url>
+        <summary>A library for getting files from web servers</summary>
+        <description>libcurl is a free and easy-to-use client-side URL transfer library, supporting
+FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, LDAP, LDAPS, FILE, IMAP,
+SMTP, POP3 and RTSP. libcurl supports SSL certificates, HTTP POST, HTTP PUT,
+FTP uploading, HTTP form based upload, proxies, cookies, user+password
+authentication (Basic, Digest, NTLM, Negotiate, Kerberos4), file transfer
+resume, http proxy tunneling and more.</description>
+      </application>
+      <application>
+        <name>libdb</name>
+        <version>5.3.28</version>
+        <release>52.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://www.oracle.com/database/berkeley-db/</url>
+        <summary>The Berkeley DB database library for C</summary>
+        <description>The Berkeley Database (Berkeley DB) is a programmatic toolkit that
+provides embedded database support for both traditional and
+client/server applications. The Berkeley DB includes B+tree, Extended
+Linear Hashing, Fixed and Variable-length record access methods,
+transactions, locking, logging, shared memory caching, and database
+recovery. The Berkeley DB supports C, C++, and Perl APIs. It is
+used by many applications, including Python and Perl, so this should
+be installed on all systems.</description>
+      </application>
+      <application>
+        <name>libeconf</name>
+        <version>0.4.0</version>
+        <release>3.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/openSUSE/libeconf</url>
+        <summary>Enhanced config file parser library</summary>
+        <description>libeconf is a highly flexible and configurable library to parse and manage
+key=value configuration files. It reads configuration file snippets from
+different directories and builds the final configuration file from it.</description>
+      </application>
+      <application>
+        <name>libevent</name>
+        <version>2.1.12</version>
+        <release>6.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://libevent.org/</url>
+        <summary>Abstract asynchronous event notification library</summary>
+        <description>The libevent API provides a mechanism to execute a callback function
+when a specific event occurs on a file descriptor or after a timeout
+has been reached. libevent is meant to replace the asynchronous event
+loop found in event driven network servers. An application just needs
+to call event_dispatch() and can then add or remove events dynamically
+without having to change the event loop.</description>
+      </application>
+      <application>
+        <name>libfdisk</name>
+        <version>2.38</version>
+        <release>3.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://en.wikipedia.org/wiki/Util-linux</url>
+        <summary>Partitioning library for fdisk-like programs</summary>
+        <description>This is library for fdisk-like programs, part of util-linux.</description>
+      </application>
+      <application>
+        <name>libffi</name>
+        <version>3.4.2</version>
+        <release>8.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://sourceware.org/libffi</url>
+        <summary>A portable foreign function interface library</summary>
+        <description>Compilers for high level languages generate code that follow certain
+conventions.  These conventions are necessary, in part, for separate
+compilation to work.  One such convention is the &quot;calling convention&quot;.
+The calling convention is a set of assumptions made by the compiler
+about where function arguments will be found on entry to a function.  A
+calling convention also specifies where the return value for a function
+is found.
+
+Some programs may not know at the time of compilation what arguments
+are to be passed to a function.  For instance, an interpreter may be
+told at run-time about the number and types of arguments used to call a
+given function.  `Libffi' can be used in such programs to provide a
+bridge from the interpreter program to compiled code.
+
+The `libffi' library provides a portable, high level programming
+interface to various calling conventions.  This allows a programmer to
+call any function specified by a call interface description at run time.
+
+FFI stands for Foreign Function Interface.  A foreign function
+interface is the popular name for the interface that allows code
+written in one language to call code written in another language.  The
+`libffi' library really only provides the lowest, machine dependent
+layer of a fully featured foreign function interface.  A layer must
+exist above `libffi' that handles type conversions for values passed
+between the two languages.</description>
+      </application>
+      <application>
+        <name>libfido2</name>
+        <version>1.11.0</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/Yubico/libfido2</url>
+        <summary>FIDO2 library</summary>
+        <description>libfido2 is an open source library to support the FIDO2 protocol.  FIDO2 is
+an open authentication standard that consists of the W3C Web Authentication
+specification (WebAuthn API), and the Client to Authentication Protocol
+(CTAP).  CTAP is an application layer protocol used for communication
+between a client (browser) or a platform (operating system) with an external
+authentication device (for example the Yubico Security Key).</description>
+      </application>
+      <application>
+        <name>libgcc</name>
+        <version>12.1.1</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://gcc.gnu.org</url>
+        <summary>GCC version 12 shared support library</summary>
+        <description>This package contains GCC shared support library which is needed
+e.g. for exception handling support.</description>
+      </application>
+      <application>
+        <name>libgcrypt</name>
+        <version>1.10.1</version>
+        <release>3.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.gnupg.org/</url>
+        <summary>A general-purpose cryptography library</summary>
+        <description>Libgcrypt is a general purpose crypto library based on the code used
+in GNU Privacy Guard.  This is a development version.</description>
+      </application>
+      <application>
+        <name>libgomp</name>
+        <version>12.1.1</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://gcc.gnu.org</url>
+        <summary>GCC OpenMP v4.5 shared support library</summary>
+        <description>This package contains GCC shared support library which is needed
+for OpenMP v4.5 support.</description>
+      </application>
+      <application>
+        <name>libgpg-error</name>
+        <version>1.45</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.gnupg.org/related_software/libgpg-error/</url>
+        <summary>Library for error values used by GnuPG components</summary>
+        <description>This is a library that defines common error values for all GnuPG
+components.  Among these are GPG, GPGSM, GPGME, GPG-Agent, libgcrypt,
+pinentry, SmartCard Daemon and possibly more in the future.</description>
+      </application>
+      <application>
+        <name>libidn2</name>
+        <version>2.3.2</version>
+        <release>4.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://www.gnu.org/software/libidn/#libidn2</url>
+        <summary>Library to support IDNA2008 internationalized domain names</summary>
+        <description>Libidn2 is an implementation of the IDNA2008 specifications in RFC
+5890, 5891, 5892, 5893 and TR46 for internationalized domain names
+(IDN). It is a standalone library, without any dependency on libidn.</description>
+      </application>
+      <application>
+        <name>libkcapi</name>
+        <version>1.3.1</version>
+        <release>4.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://www.chronox.de/libkcapi.html</url>
+        <summary>User space interface to the Linux Kernel Crypto API</summary>
+        <description>libkcapi allows user-space to access the Linux kernel crypto API.
+
+This library uses the netlink interface and exports easy to use APIs
+so that a developer does not need to consider the low-level netlink
+interface handling.
+
+The library does not implement any cipher algorithms.  All consumer
+requests are sent to the kernel for processing.  Results from the
+kernel crypto API are returned to the consumer via the library API.
+
+The kernel interface and therefore this library can be used by
+unprivileged processes.</description>
+      </application>
+      <application>
+        <name>libkcapi-hmaccalc</name>
+        <version>1.3.1</version>
+        <release>4.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://www.chronox.de/libkcapi.html</url>
+        <summary>Drop-in replacements for hmaccalc provided by the libkcapi package</summary>
+        <description>Provides drop-in replacements for sha*hmac tools (from package
+hmaccalc) using libkcapi.</description>
+      </application>
+      <application>
+        <name>libmount</name>
+        <version>2.38</version>
+        <release>3.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://en.wikipedia.org/wiki/Util-linux</url>
+        <summary>Device mounting library</summary>
+        <description>This is the device mounting library, part of util-linux.</description>
+      </application>
+      <application>
+        <name>libnghttp2</name>
+        <version>1.47.0</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://nghttp2.org/</url>
+        <summary>A library implementing the HTTP/2 protocol</summary>
+        <description>libnghttp2 is a library implementing the Hypertext Transfer Protocol
+version 2 (HTTP/2) protocol in C.</description>
+      </application>
+      <application>
+        <name>libnsl2</name>
+        <version>2.0.0</version>
+        <release>3.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/thkukuk/libnsl</url>
+        <summary>Public client interface library for NIS(YP) and NIS+</summary>
+        <description>This package contains the libnsl library. This library contains
+the public client interface for NIS(YP) and NIS+.
+This code was formerly part of glibc, but is now standalone to
+be able to link against TI-RPC for IPv6 support.</description>
+      </application>
+      <application>
+        <name>libpsl</name>
+        <version>0.21.1</version>
+        <release>5.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://rockdaboot.github.io/libpsl</url>
+        <summary>C library for the Publix Suffix List</summary>
+        <description>libpsl is a C library to handle the Public Suffix List. A &quot;public suffix&quot; is a
+domain name under which Internet users can directly register own names.
+
+Browsers and other web clients can use it to
+
+- Avoid privacy-leaking &quot;supercookies&quot;;
+- Avoid privacy-leaking &quot;super domain&quot; certificates;
+- Domain highlighting parts of the domain in a user interface;
+- Sorting domain lists by site;
+
+Libpsl...
+
+- has built-in PSL data for fast access;
+- allows to load PSL data from files;
+- checks if a given domain is a &quot;public suffix&quot;;
+- provides immediate cookie domain verification;
+- finds the longest public part of a given domain;
+- finds the shortest private part of a given domain;
+- works with international domains (UTF-8 and IDNA2008 Punycode);
+- is thread-safe;
+- handles IDNA2008 UTS#46;</description>
+      </application>
+      <application>
+        <name>libpwquality</name>
+        <version>1.4.4</version>
+        <release>7.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/libpwquality/libpwquality/</url>
+        <summary>A library for password generation and password quality checking</summary>
+        <description>This is a library for password quality checks and generation
+of random passwords that pass the checks.
+This library uses the cracklib and cracklib dictionaries
+to perform some of the checks.</description>
+      </application>
+      <application>
+        <name>libseccomp</name>
+        <version>2.5.3</version>
+        <release>2.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/seccomp/libseccomp</url>
+        <summary>Enhanced seccomp library</summary>
+        <description>The libseccomp library provides an easy to use interface to the Linux Kernel's
+syscall filtering mechanism, seccomp.  The libseccomp API allows an application
+to specify which syscalls, and optionally which syscall arguments, the
+application is allowed to execute, all of which are enforced by the Linux
+Kernel.</description>
+      </application>
+      <application>
+        <name>libselinux</name>
+        <version>3.4</version>
+        <release>0.rc3.1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/SELinuxProject/selinux/wiki</url>
+        <summary>SELinux library and simple utilities</summary>
+        <description>Security-enhanced Linux is a feature of the Linux® kernel and a number
+of utilities with enhanced security functionality designed to add
+mandatory access controls to Linux.  The Security-enhanced Linux
+kernel contains new architectural components originally developed to
+improve the security of the Flask operating system. These
+architectural components provide general support for the enforcement
+of many kinds of mandatory access control policies, including those
+based on the concepts of Type Enforcement®, Role-based Access
+Control, and Multi-level Security.
+
+libselinux provides an API for SELinux applications to get and set
+process and file security contexts and to obtain security policy
+decisions.  Required for any applications that use the SELinux API.</description>
+      </application>
+      <application>
+        <name>libsemanage</name>
+        <version>3.4</version>
+        <release>0.rc3.1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/SELinuxProject/selinux/wiki</url>
+        <summary>SELinux binary policy manipulation library</summary>
+        <description>Security-enhanced Linux is a feature of the Linux® kernel and a number
+of utilities with enhanced security functionality designed to add
+mandatory access controls to Linux.  The Security-enhanced Linux
+kernel contains new architectural components originally developed to
+improve the security of the Flask operating system. These
+architectural components provide general support for the enforcement
+of many kinds of mandatory access control policies, including those
+based on the concepts of Type Enforcement®, Role-based Access
+Control, and Multi-level Security.
+
+libsemanage provides an API for the manipulation of SELinux binary policies.
+It is used by checkpolicy (the policy compiler) and similar tools, as well
+as by programs like load_policy that need to perform specific transformations
+on binary policies such as customizing policy boolean settings.</description>
+      </application>
+      <application>
+        <name>libsepol</name>
+        <version>3.4</version>
+        <release>0.rc3.1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/SELinuxProject/selinux/wiki</url>
+        <summary>SELinux binary policy manipulation library</summary>
+        <description>Security-enhanced Linux is a feature of the Linux® kernel and a number
+of utilities with enhanced security functionality designed to add
+mandatory access controls to Linux.  The Security-enhanced Linux
+kernel contains new architectural components originally developed to
+improve the security of the Flask operating system. These
+architectural components provide general support for the enforcement
+of many kinds of mandatory access control policies, including those
+based on the concepts of Type Enforcement®, Role-based Access
+Control, and Multi-level Security.
+
+libsepol provides an API for the manipulation of SELinux binary policies.
+It is used by checkpolicy (the policy compiler) and similar tools, as well
+as by programs like load_policy that need to perform specific transformations
+on binary policies such as customizing policy boolean settings.</description>
+      </application>
+      <application>
+        <name>libsigsegv</name>
+        <version>2.14</version>
+        <release>2.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://www.gnu.org/software/libsigsegv/</url>
+        <summary>Library for handling page faults in user mode</summary>
+        <description>This is a library for handling page faults in user mode. A page fault
+occurs when a program tries to access to a region of memory that is
+currently not available. Catching and handling a page fault is a useful
+technique for implementing:
+  - pageable virtual memory
+  - memory-mapped access to persistent databases
+  - generational garbage collectors
+  - stack overflow handlers
+  - distributed shared memory</description>
+      </application>
+      <application>
+        <name>libsmartcols</name>
+        <version>2.38</version>
+        <release>3.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://en.wikipedia.org/wiki/Util-linux</url>
+        <summary>Formatting library for ls-like programs</summary>
+        <description>This is library for ls-like terminal programs, part of util-linux.</description>
+      </application>
+      <application>
+        <name>libssh</name>
+        <version>0.9.6</version>
+        <release>4.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://www.libssh.org</url>
+        <summary>A library implementing the SSH protocol</summary>
+        <description>The ssh library was designed to be used by programmers needing a working SSH
+implementation by the mean of a library. The complete control of the client is
+made by the programmer. With libssh, you can remotely execute programs, transfer
+files, use a secure and transparent tunnel for your remote programs. With its
+Secure FTP implementation, you can play with remote files easily, without
+third-party programs others than libcrypto (from openssl).</description>
+      </application>
+      <application>
+        <name>libssh-config</name>
+        <version>0.9.6</version>
+        <release>4.fc36</release>
+        <arch>noarch</arch>
+        <url>http://www.libssh.org</url>
+        <summary>Configuration files for libssh</summary>
+        <description>The libssh-config package provides the default configuration files for libssh.</description>
+      </application>
+      <application>
+        <name>libstdc++</name>
+        <version>12.1.1</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://gcc.gnu.org</url>
+        <summary>GNU Standard C++ Library</summary>
+        <description>The libstdc++ package contains a rewritten standard compliant GCC Standard
+C++ Library.</description>
+      </application>
+      <application>
+        <name>libtasn1</name>
+        <version>4.18.0</version>
+        <release>2.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://www.gnu.org/software/libtasn1/</url>
+        <summary>The ASN.1 library used in GNUTLS</summary>
+        <description>A library that provides Abstract Syntax Notation One (ASN.1, as specified
+by the X.680 ITU-T recommendation) parsing and structures management, and
+Distinguished Encoding Rules (DER, as per X.690) encoding and decoding functions.</description>
+      </application>
+      <application>
+        <name>libtirpc</name>
+        <version>1.3.2</version>
+        <release>1.rc1.fc36.1</release>
+        <arch>x86_64</arch>
+        <url>http://git.linux-nfs.org/?p=steved/libtirpc.git;a=summary</url>
+        <summary>Transport Independent RPC Library</summary>
+        <description>This package contains SunLib's implementation of transport-independent
+RPC (TI-RPC) documentation.  This library forms a piece of the base of
+Open Network Computing (ONC), and is derived directly from the
+Solaris 2.3 source.
+
+TI-RPC is an enhanced version of TS-RPC that requires the UNIX System V
+Transport Layer Interface (TLI) or an equivalent X/Open Transport Interface
+(XTI).  TI-RPC is on-the-wire compatible with the TS-RPC, which is supported
+by almost 70 vendors on all major operating systems.  TS-RPC source code
+(RPCSRC 4.0) remains available from several internet sites.</description>
+      </application>
+      <application>
+        <name>libunistring</name>
+        <version>1.0</version>
+        <release>1.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://www.gnu.org/software/libunistring/</url>
+        <summary>GNU Unicode string library</summary>
+        <description>This portable C library implements Unicode string types in three flavours:
+(UTF-8, UTF-16, UTF-32), together with functions for character processing
+(names, classifications, properties) and functions for string processing
+(iteration, formatted output, width, word breaks, line breaks, normalization,
+case folding and regular expressions).</description>
+      </application>
+      <application>
+        <name>libutempter</name>
+        <version>1.2.1</version>
+        <release>6.fc36</release>
+        <arch>x86_64</arch>
+        <url>ftp://ftp.altlinux.org/pub/people/ldv/utempter</url>
+        <summary>A privileged helper for utmp/wtmp updates</summary>
+        <description>This library provides interface for terminal emulators such as
+screen and xterm to record user sessions to utmp and wtmp files.</description>
+      </application>
+      <application>
+        <name>libuuid</name>
+        <version>2.38</version>
+        <release>3.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://en.wikipedia.org/wiki/Util-linux</url>
+        <summary>Universally unique ID library</summary>
+        <description>This is the universally unique ID library, part of util-linux.
+
+The libuuid library generates and parses 128-bit universally unique
+id's (UUID's).  A UUID is an identifier that is unique across both
+space and time, with respect to the space of all UUIDs.  A UUID can
+be used for multiple purposes, from tagging objects with an extremely
+short lifetime, to reliably identifying very persistent objects
+across a network.
+
+See also the &quot;uuid&quot; package, which is a separate implementation.</description>
+      </application>
+      <application>
+        <name>libverto</name>
+        <version>0.3.2</version>
+        <release>3.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/latchset/libverto</url>
+        <summary>Main loop abstraction library</summary>
+        <description>libverto provides a way for libraries to expose asynchronous interfaces
+without having to choose a particular event loop, offloading this
+decision to the end application which consumes the library.
+
+If you are packaging an application, not library, based on libverto,
+you should depend either on a specific implementation module or you
+can depend on the virtual provides 'libverto-module-base'. This will
+ensure that you have at least one module installed that provides io,
+timeout and signal functionality. Currently glib is the only module
+that does not provide these three because it lacks signal. However,
+glib will support signal in the future.</description>
+      </application>
+      <application>
+        <name>libxcrypt</name>
+        <version>4.4.28</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/besser82/libxcrypt</url>
+        <summary>Extended crypt library for descrypt, md5crypt, bcrypt, and others</summary>
+        <description>libxcrypt is a modern library for one-way hashing of passwords.  It
+supports a wide variety of both modern and historical hashing methods:
+yescrypt, gost-yescrypt, scrypt, bcrypt, sha512crypt, sha256crypt,
+md5crypt, SunMD5, sha1crypt, NT, bsdicrypt, bigcrypt, and descrypt.
+It provides the traditional Unix crypt and crypt_r interfaces, as well
+as a set of extended interfaces pioneered by Openwall Linux, crypt_rn,
+crypt_ra, crypt_gensalt, crypt_gensalt_rn, and crypt_gensalt_ra.
+
+libxcrypt is intended to be used by login(1), passwd(1), and other
+similar programs; that is, to hash a small number of passwords during
+an interactive authentication dialogue with a human. It is not suitable
+for use in bulk password-cracking applications, or in any other situation
+where speed is more important than careful handling of sensitive data.
+However, it is intended to be fast and lightweight enough for use in
+servers that must field thousands of login attempts per minute.
+
+This version of the library does not provide the legacy API functions
+that have been provided by glibc's libcrypt.so.1.</description>
+      </application>
+      <application>
+        <name>libxcrypt-compat</name>
+        <version>4.4.28</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/besser82/libxcrypt</url>
+        <summary>Compatibility library providing legacy API functions</summary>
+        <description>This package contains the library providing the compatibility API
+for applications that are linked against glibc's libxcrypt, or that
+are still using the unsafe and deprecated, encrypt, encrypt_r,
+setkey, setkey_r, and fcrypt functions, which are still required by
+recent versions of POSIX, the Single UNIX Specification, and various
+other standards.
+
+All existing binary executables linked against glibc's libcrypt should
+work unmodified with the library supplied by this package.</description>
+      </application>
+      <application>
+        <name>libxkbcommon</name>
+        <version>1.4.1</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://www.x.org</url>
+        <summary>X.Org X11 XKB parsing library</summary>
+        <description>libxkbcommon is the X.Org library for compiling XKB maps into formats usable by
+the X Server or other display servers.</description>
+      </application>
+      <application>
+        <name>libxml2</name>
+        <version>2.9.14</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://xmlsoft.org/</url>
+        <summary>Library providing XML and HTML support</summary>
+        <description>This library allows to manipulate XML files. It includes support
+to read, modify and write XML and HTML files. There is DTDs support
+this includes parsing and validation even with complex DtDs, either
+at parse time or later once the document has been modified. The output
+can be a simple SAX stream or and in-memory DOM like representations.
+In this case one can use the built-in XPath and XPointer implementation
+to select sub nodes or ranges. A flexible Input/Output mechanism is
+available, with existing HTTP and FTP modules and combined to an
+URI library.</description>
+      </application>
+      <application>
+        <name>libzstd</name>
+        <version>1.5.2</version>
+        <release>2.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/facebook/zstd</url>
+        <summary>Zstd shared library</summary>
+        <description>Zstandard compression shared library.</description>
+      </application>
+      <application>
+        <name>linux-firmware</name>
+        <version>20220509</version>
+        <release>133.fc37</release>
+        <arch>noarch</arch>
+        <url>http://www.kernel.org/</url>
+        <summary>Firmware files used by the Linux kernel</summary>
+        <description>This package includes firmware files required for some devices to
+operate.</description>
+      </application>
+      <application>
+        <name>linux-firmware-whence</name>
+        <version>20220509</version>
+        <release>133.fc37</release>
+        <arch>noarch</arch>
+        <url>http://www.kernel.org/</url>
+        <summary>WHENCE License file</summary>
+        <description>This package contains the WHENCE license file which documents the vendor license details.</description>
+      </application>
+      <application>
+        <name>lua-libs</name>
+        <version>5.4.4</version>
+        <release>2.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.lua.org/</url>
+        <summary>Libraries for lua</summary>
+        <description>This package contains the shared libraries for lua.</description>
+      </application>
+      <application>
+        <name>lz4-libs</name>
+        <version>1.9.3</version>
+        <release>4.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://lz4.github.io/lz4/</url>
+        <summary>Libaries for lz4</summary>
+        <description>This package contains the libaries for lz4.</description>
+      </application>
+      <application>
+        <name>memstrack</name>
+        <version>0.2.4</version>
+        <release>2.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/ryncsn/memstrack</url>
+        <summary>A memory allocation tracer, like a hot spot analyzer for memory allocation</summary>
+        <description>A memory allocation tracer, like a hot spot analyzer for memory allocation</description>
+      </application>
+      <application>
+        <name>mkpasswd</name>
+        <version>5.5.13</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://www.linux.it/~md/software/</url>
+        <summary>Encrypt a password with crypt(3) function using a salt</summary>
+        <description>mkpasswd tool encrypts a given password with the crypt(3) libc function
+using a given salt.</description>
+      </application>
+      <application>
+        <name>mpdecimal</name>
+        <version>2.5.1</version>
+        <release>3.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://www.bytereef.org/mpdecimal/index.html</url>
+        <summary>Library for general decimal arithmetic</summary>
+        <description>The package contains a library limpdec implementing General Decimal Arithmetic
+Specification. The specification, written by Mike Cowlishaw from IBM, defines
+a general purpose arbitrary precision data type together with rigorously
+specified functions and rounding behavior.</description>
+      </application>
+      <application>
+        <name>mpfr</name>
+        <version>4.1.0</version>
+        <release>9.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://www.mpfr.org/</url>
+        <summary>C library for multiple-precision floating-point computations</summary>
+        <description>The MPFR library is a C library for multiple-precision floating-point
+computations with &quot;correct rounding&quot;. The MPFR is efficient and
+also has a well-defined semantics. It copies the good ideas from the
+ANSI/IEEE-754 standard for double-precision floating-point arithmetic
+(53-bit mantissa). MPFR is based on the GMP multiple-precision library.</description>
+      </application>
+      <application>
+        <name>ncurses-base</name>
+        <version>6.3</version>
+        <release>2.20220501.fc37</release>
+        <arch>noarch</arch>
+        <url>https://invisible-island.net/ncurses/ncurses.html</url>
+        <summary>Descriptions of common terminals</summary>
+        <description>This package contains descriptions of common terminals. Other terminal
+descriptions are included in the ncurses-term package.</description>
+      </application>
+      <application>
+        <name>ncurses-libs</name>
+        <version>6.3</version>
+        <release>2.20220501.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://invisible-island.net/ncurses/ncurses.html</url>
+        <summary>Ncurses libraries</summary>
+        <description>The curses library routines are a terminal-independent method of
+updating character screens with reasonable optimization.  The ncurses
+(new curses) library is a freely distributable replacement for the
+discontinued 4.4 BSD classic curses library.
+
+This package contains the ncurses libraries.</description>
+      </application>
+      <application>
+        <name>openldap</name>
+        <version>2.6.2</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://www.openldap.org/</url>
+        <summary>LDAP support libraries</summary>
+        <description>OpenLDAP is an open source suite of LDAP (Lightweight Directory Access
+Protocol) applications and development tools. LDAP is a set of
+protocols for accessing directory services (usually phone book style
+information, but other information is possible) over the Internet,
+similar to the way DNS (Domain Name System) information is propagated
+over the Internet. The openldap package contains configuration files,
+libraries, and documentation for OpenLDAP.</description>
+      </application>
+      <application>
+        <name>openssl-libs</name>
+        <epoch>1</epoch>
+        <version>3.0.2</version>
+        <release>4.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://www.openssl.org/</url>
+        <summary>A general purpose cryptography library with TLS implementation</summary>
+        <description>OpenSSL is a toolkit for supporting cryptography. The openssl-libs
+package contains the libraries that are used by various applications which
+support cryptographic algorithms and protocols.</description>
+      </application>
+      <application>
+        <name>openssl-pkcs11</name>
+        <version>0.4.11</version>
+        <release>8.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/OpenSC/libp11</url>
+        <summary>A PKCS#11 engine for use with OpenSSL</summary>
+        <description>openssl-pkcs11 enables hardware security module (HSM), and smart card support in
+OpenSSL applications. More precisely, it is an OpenSSL engine which makes
+registered PKCS#11 modules available for OpenSSL applications. The engine is
+optional and can be loaded by configuration file, command line or through the
+OpenSSL ENGINE API.</description>
+      </application>
+      <application>
+        <name>os-prober</name>
+        <version>1.77</version>
+        <release>9.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://kitenet.net/~joey/code/os-prober/</url>
+        <summary>Probes disks on the system for installed operating systems</summary>
+        <description>This package detects other OSes available on a system and outputs the results
+in a generic machine-readable format. Support for new OSes and Linux
+distributions can be added easily.</description>
+      </application>
+      <application>
+        <name>p11-kit</name>
+        <version>0.24.1</version>
+        <release>2.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://p11-glue.freedesktop.org/p11-kit.html</url>
+        <summary>Library for loading and sharing PKCS#11 modules</summary>
+        <description>p11-kit provides a way to load and enumerate PKCS#11 modules, as well
+as a standard configuration setup for installing PKCS#11 modules in
+such a way that they're discoverable.</description>
+      </application>
+      <application>
+        <name>p11-kit-trust</name>
+        <version>0.24.1</version>
+        <release>2.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://p11-glue.freedesktop.org/p11-kit.html</url>
+        <summary>System trust module from p11-kit</summary>
+        <description>The p11-kit-trust package contains a system trust PKCS#11 module which
+contains certificate anchors and black lists.</description>
+      </application>
+      <application>
+        <name>pam</name>
+        <version>1.5.2</version>
+        <release>12.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://www.linux-pam.org/</url>
+        <summary>An extensible library which provides authentication for applications</summary>
+        <description>PAM (Pluggable Authentication Modules) is a system security tool that
+allows system administrators to set authentication policy without
+having to recompile programs that handle authentication.</description>
+      </application>
+      <application>
+        <name>pam-libs</name>
+        <version>1.5.2</version>
+        <release>12.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://www.linux-pam.org/</url>
+        <summary>Shared libraries of the PAM package</summary>
+        <description>PAM (Pluggable Authentication Modules) is a system security tool that
+allows system administrators to set authentication policy without
+having to recompile programs that handle authentication. The pam-libs
+contains the shared libraries for PAM.</description>
+      </application>
+      <application>
+        <name>pcre</name>
+        <version>8.45</version>
+        <release>1.fc36.1</release>
+        <arch>x86_64</arch>
+        <url>https://www.pcre.org/</url>
+        <summary>Perl-compatible regular expression library</summary>
+        <description>PCRE, Perl-compatible regular expression, library has its own native API, but
+a set of wrapper functions that are based on the POSIX API are also supplied
+in the libpcreposix library. Note that this just provides a POSIX calling
+interface to PCRE: the regular expressions themselves still follow Perl syntax
+and semantics. This package provides support for strings in 8-bit and UTF-8
+encodings. Detailed change log is provided by pcre-doc package.</description>
+      </application>
+      <application>
+        <name>pcre2</name>
+        <version>10.40</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.pcre.org/</url>
+        <summary>Perl-compatible regular expression library</summary>
+        <description>PCRE2 is a re-working of the original PCRE (Perl-compatible regular
+expression) library to provide an entirely new API.
+
+PCRE2 is written in C, and it has its own API. There are three sets of
+functions, one for the 8-bit library, which processes strings of bytes, one
+for the 16-bit library, which processes strings of 16-bit values, and one for
+the 32-bit library, which processes strings of 32-bit values. There are no C++
+wrappers. This package provides support for strings in 8-bit and UTF-8
+encodings. Install pcre2-utf16 or pcre2-utf32 packages for the other ones.
+
+The distribution does contain a set of C wrapper functions for the 8-bit
+library that are based on the POSIX regular expression API (see the pcre2posix
+man page). These can be found in a library called libpcre2posix. Note that
+this just provides a POSIX calling interface to PCRE2; the regular expressions
+themselves still follow Perl syntax and semantics. The POSIX API is
+restricted, and does not give full access to all of PCRE2's facilities.</description>
+      </application>
+      <application>
+        <name>pcre2-syntax</name>
+        <version>10.40</version>
+        <release>1.fc37</release>
+        <arch>noarch</arch>
+        <url>https://www.pcre.org/</url>
+        <summary>Documentation for PCRE2 regular expressions</summary>
+        <description>This is a set of manual pages that document a syntax of the regular
+expressions implemented by the PCRE2 library.</description>
+      </application>
+      <application>
+        <name>pigz</name>
+        <version>2.7</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.zlib.net/pigz/</url>
+        <summary>Parallel implementation of gzip</summary>
+        <description>pigz, which stands for parallel implementation of gzip,
+is a fully functional replacement for gzip that exploits
+multiple processors and multiple cores to the hilt when
+compressing data.</description>
+      </application>
+      <application>
+        <name>popt</name>
+        <version>1.18</version>
+        <release>7.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/rpm-software-management/popt/</url>
+        <summary>C library for parsing command line parameters</summary>
+        <description>Popt is a C library for parsing command line parameters. Popt was
+heavily influenced by the getopt() and getopt_long() functions, but
+it improves on them by allowing more powerful argument expansion.
+Popt can parse arbitrary argv[] style arrays and automatically set
+variables based on command line arguments. Popt allows command line
+arguments to be aliased via configuration files and includes utility
+functions for parsing arbitrary strings into argv[] arrays using
+shell-like rules.</description>
+      </application>
+      <application>
+        <name>procps-ng</name>
+        <version>3.3.17</version>
+        <release>5.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://sourceforge.net/projects/procps-ng/</url>
+        <summary>System and process monitoring utilities</summary>
+        <description>The procps package contains a set of system utilities that provide
+system information. Procps includes ps, free, skill, pkill, pgrep,
+snice, tload, top, uptime, vmstat, pidof, pmap, slabtop, w, watch,
+pwdx and pidwait.
+The ps command displays a snapshot of running processes. The top command
+provides a repetitive update of the statuses of running processes.
+The free command displays the amounts of free and used memory on your
+system. The skill command sends a terminate command (or another
+specified signal) to a specified set of processes. The snice
+command is used to change the scheduling priority of specified
+processes. The tload command prints a graph of the current system
+load average to a specified tty. The uptime command displays the
+current time, how long the system has been running, how many users
+are logged on, and system load averages for the past one, five,
+and fifteen minutes. The w command displays a list of the users
+who are currently logged on and what they are running. The watch
+program watches a running program. The vmstat command displays
+virtual memory statistics about processes, memory, paging, block
+I/O, traps, and CPU activity. The pwdx command reports the current
+working directory of a process or processes. The pidwait command
+waits for processes of specified names.</description>
+      </application>
+      <application>
+        <name>publicsuffix-list-dafsa</name>
+        <version>20210518</version>
+        <release>4.fc36</release>
+        <arch>noarch</arch>
+        <url>https://publicsuffix.org/</url>
+        <summary>Cross-vendor public domain suffix database in DAFSA form</summary>
+        <description>The Public Suffix List is a cross-vendor initiative to provide
+an accurate list of domain name suffixes, maintained by the hard work
+of Mozilla volunteers and by submissions from registries.
+Software using the Public Suffix List will be able to determine where
+cookies may and may not be set, protecting the user from being
+tracked across sites.
+
+This package includes a DAFSA representation of the Public Suffix List
+for runtime loading.</description>
+      </application>
+      <application>
+        <name>python-pip-wheel</name>
+        <version>22.0.4</version>
+        <release>2.fc37</release>
+        <arch>noarch</arch>
+        <url>https://pip.pypa.io/</url>
+        <summary>The pip wheel</summary>
+        <description>A Python wheel of pip to use with venv.</description>
+      </application>
+      <application>
+        <name>python-setuptools-wheel</name>
+        <version>60.9.3</version>
+        <release>2.fc37</release>
+        <arch>noarch</arch>
+        <url>https://pypi.python.org/pypi/setuptools</url>
+        <summary>The setuptools wheel</summary>
+        <description>A Python wheel of setuptools to use with venv.</description>
+      </application>
+      <application>
+        <name>python-unversioned-command</name>
+        <version>3.10.4</version>
+        <release>1.fc37</release>
+        <arch>noarch</arch>
+        <url>https://www.python.org/</url>
+        <summary>The &quot;python&quot; command that runs Python 3</summary>
+        <description>This package contains /usr/bin/python - the &quot;python&quot; command that runs Python 3.</description>
+      </application>
+      <application>
+        <name>python3</name>
+        <version>3.10.4</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.python.org/</url>
+        <summary>Python 3.10 interpreter</summary>
+        <description>Python 3.10 is an accessible, high-level, dynamically typed, interpreted
+programming language, designed with an emphasis on code readability.
+It includes an extensive standard library, and has a vast ecosystem of
+third-party libraries.
+
+The python3 package provides the &quot;python3&quot; executable: the reference
+interpreter for the Python language, version 3.
+The majority of its standard library is provided in the python3-libs package,
+which should be installed automatically along with python3.
+The remaining parts of the Python standard library are broken out into the
+python3-tkinter and python3-test packages, which may need to be installed
+separately.
+
+Documentation for Python is provided in the python3-docs package.
+
+Packages containing additional libraries for Python are generally named with
+the &quot;python3-&quot; prefix.</description>
+      </application>
+      <application>
+        <name>python3-libs</name>
+        <version>3.10.4</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.python.org/</url>
+        <summary>Python runtime libraries</summary>
+        <description>This package contains runtime libraries for use by Python:
+- the majority of the Python standard library
+- a dynamically linked library for use by applications that embed Python as
+  a scripting language, and by the main &quot;python3&quot; executable</description>
+      </application>
+      <application>
+        <name>qrencode-libs</name>
+        <version>4.1.1</version>
+        <release>2.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://fukuchi.org/works/qrencode/</url>
+        <summary>QR Code encoding library - Shared libraries</summary>
+        <description>The qrencode-libs package contains the shared libraries and header files for
+applications that use qrencode.</description>
+      </application>
+      <application>
+        <name>readline</name>
+        <version>8.1</version>
+        <release>6.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://tiswww.case.edu/php/chet/readline/rltop.html</url>
+        <summary>A library for editing typed command lines</summary>
+        <description>The Readline library provides a set of functions that allow users to
+edit command lines. Both Emacs and vi editing modes are available. The
+Readline library includes additional functions for maintaining a list
+of previously-entered command lines for recalling or editing those
+lines, and for performing csh-like history expansion on previous
+commands.</description>
+      </application>
+      <application>
+        <name>rpm</name>
+        <version>4.18.0</version>
+        <release>0.alpha2.1.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://www.rpm.org/</url>
+        <summary>The RPM package management system</summary>
+        <description>The RPM Package Manager (RPM) is a powerful command line driven
+package management system capable of installing, uninstalling,
+verifying, querying, and updating software packages. Each software
+package consists of an archive of files along with information about
+the package like its version, a description, etc.</description>
+      </application>
+      <application>
+        <name>rpm-libs</name>
+        <version>4.18.0</version>
+        <release>0.alpha2.1.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://www.rpm.org/</url>
+        <summary>Libraries for manipulating RPM packages</summary>
+        <description>This package contains the RPM shared libraries.</description>
+      </application>
+      <application>
+        <name>sed</name>
+        <version>4.8</version>
+        <release>10.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://sed.sourceforge.net/</url>
+        <summary>A GNU stream text editor</summary>
+        <description>The sed (Stream EDitor) editor is a stream or batch (non-interactive)
+editor.  Sed takes text as input, performs an operation or set of
+operations on the text and outputs the modified text.  The operations
+that sed performs (substitutions, deletions, insertions, etc.) can be
+specified in a script file or from the command line.</description>
+      </application>
+      <application>
+        <name>setup</name>
+        <version>2.13.10</version>
+        <release>1.fc37</release>
+        <arch>noarch</arch>
+        <url>https://pagure.io/setup/</url>
+        <summary>A set of system configuration and setup files</summary>
+        <description>The setup package contains a set of important system configuration and
+setup files, such as passwd, group, and profile.</description>
+      </application>
+      <application>
+        <name>shadow-utils</name>
+        <epoch>2</epoch>
+        <version>4.11.1</version>
+        <release>2.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/shadow-maint/shadow</url>
+        <summary>Utilities for managing accounts and shadow password files</summary>
+        <description>The shadow-utils package includes the necessary programs for
+converting UNIX password files to the shadow password format, plus
+programs for managing user and group accounts. The pwconv command
+converts passwords to the shadow password format. The pwunconv command
+unconverts shadow passwords and generates a passwd file (a standard
+UNIX password file). The pwck command checks the integrity of password
+and shadow files. The lastlog command prints out the last login times
+for all users. The useradd, userdel, and usermod commands are used for
+managing user accounts. The groupadd, groupdel, and groupmod commands
+are used for managing group accounts.</description>
+      </application>
+      <application>
+        <name>sqlite-libs</name>
+        <version>3.38.5</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://www.sqlite.org/</url>
+        <summary>Shared library for the sqlite3 embeddable SQL database engine.</summary>
+        <description>This package contains the shared library for sqlite.</description>
+      </application>
+      <application>
+        <name>systemd</name>
+        <version>251.1</version>
+        <release>2.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.freedesktop.org/wiki/Software/systemd</url>
+        <summary>System and Service Manager</summary>
+        <description>systemd is a system and service manager that runs as PID 1 and starts the rest
+of the system. It provides aggressive parallelization capabilities, uses socket
+and D-Bus activation for starting services, offers on-demand starting of
+daemons, keeps track of processes using Linux control groups, maintains mount
+and automount points, and implements an elaborate transactional dependency-based
+service control logic. systemd supports SysV and LSB init scripts and works as a
+replacement for sysvinit. Other parts of this package are a logging daemon,
+utilities to control basic system configuration like the hostname, date, locale,
+maintain a list of logged-in users, system accounts, runtime directories and
+settings, and a logging daemons.
+
+This package was built from the 251.1-stable branch of systemd.</description>
+      </application>
+      <application>
+        <name>systemd-libs</name>
+        <version>251.1</version>
+        <release>2.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.freedesktop.org/wiki/Software/systemd</url>
+        <summary>systemd libraries</summary>
+        <description>Libraries for systemd and udev.</description>
+      </application>
+      <application>
+        <name>systemd-networkd</name>
+        <version>251.1</version>
+        <release>2.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.freedesktop.org/wiki/Software/systemd</url>
+        <summary>System daemon that manages network configurations</summary>
+        <description>systemd-networkd is a system service that manages networks. It detects and
+configures network devices as they appear, as well as creating virtual network
+devices.</description>
+      </application>
+      <application>
+        <name>systemd-pam</name>
+        <version>251.1</version>
+        <release>2.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.freedesktop.org/wiki/Software/systemd</url>
+        <summary>systemd PAM module</summary>
+        <description>Systemd PAM module registers the session with systemd-logind.</description>
+      </application>
+      <application>
+        <name>systemd-resolved</name>
+        <version>251.1</version>
+        <release>2.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.freedesktop.org/wiki/Software/systemd</url>
+        <summary>Network Name Resolution manager</summary>
+        <description>systemd-resolved is a system service that provides network name resolution to
+local applications. It implements a caching and validating DNS/DNSSEC stub
+resolver, as well as an LLMNR and MulticastDNS resolver and responder.</description>
+      </application>
+      <application>
+        <name>systemd-udev</name>
+        <version>251.1</version>
+        <release>2.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.freedesktop.org/wiki/Software/systemd</url>
+        <summary>Rule-based device node and kernel event manager</summary>
+        <description>This package contains systemd-udev and the rules and hardware database needed to
+manage device nodes. This package is necessary on physical machines and in
+virtual machines, but not in containers.
+
+This package also provides systemd-timesyncd, a network time protocol daemon.
+
+It also contains tools to manage encrypted home areas and secrets bound to the
+machine, and to create or grow partitions and make file systems automatically.</description>
+      </application>
+      <application>
+        <name>tpm2-tss</name>
+        <version>3.2.0</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/tpm2-software/tpm2-tss</url>
+        <summary>TPM2.0 Software Stack</summary>
+        <description>tpm2-tss is a software stack supporting Trusted Platform Module(TPM) 2.0 system
+APIs. It sits between TPM driver and applications, providing TPM2.0 specified
+APIs for applications to access TPM module through kernel TPM drivers.</description>
+      </application>
+      <application>
+        <name>tzdata</name>
+        <version>2022a</version>
+        <release>1.fc37</release>
+        <arch>noarch</arch>
+        <url>https://www.iana.org/time-zones</url>
+        <summary>Timezone data</summary>
+        <description>This package contains data files with rules for various timezones around
+the world.</description>
+      </application>
+      <application>
+        <name>util-linux</name>
+        <version>2.38</version>
+        <release>3.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://en.wikipedia.org/wiki/Util-linux</url>
+        <summary>Collection of basic system utilities</summary>
+        <description>The util-linux package contains a large variety of low-level system
+utilities that are necessary for a Linux system to function. Among
+others, util-linux contains the fdisk configuration tool and the login
+program.</description>
+      </application>
+      <application>
+        <name>util-linux-core</name>
+        <version>2.38</version>
+        <release>3.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://en.wikipedia.org/wiki/Util-linux</url>
+        <summary>The most essential utilities from the util-linux suite</summary>
+        <description>This is a very basic set of Linux utilities that is necessary on
+minimal installations.</description>
+      </application>
+      <application>
+        <name>whois-nls</name>
+        <version>5.5.13</version>
+        <release>1.fc37</release>
+        <arch>noarch</arch>
+        <url>http://www.linux.it/~md/software/</url>
+        <summary>Gettext catalogs for whois tools</summary>
+        <description>whois tools messages translated into different natural languages.</description>
+      </application>
+      <application>
+        <name>xkeyboard-config</name>
+        <version>2.35.1</version>
+        <release>1.fc37</release>
+        <arch>noarch</arch>
+        <url>http://www.freedesktop.org/wiki/Software/XKeyboardConfig</url>
+        <summary>X Keyboard Extension configuration data</summary>
+        <description>This package contains configuration data used by the X Keyboard Extension (XKB),
+which allows selection of keyboard layouts when using a graphical interface.</description>
+      </application>
+      <application>
+        <name>xz</name>
+        <version>5.2.5</version>
+        <release>9.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://tukaani.org/xz/</url>
+        <summary>LZMA compression utilities</summary>
+        <description>XZ Utils are an attempt to make LZMA compression easy to use on free (as in
+freedom) operating systems. This is achieved by providing tools and libraries
+which are similar to use than the equivalents of the most popular existing
+compression algorithms.
+
+LZMA is a general purpose compression algorithm designed by Igor Pavlov as
+part of 7-Zip. It provides high compression ratio while keeping the
+decompression speed fast.</description>
+      </application>
+      <application>
+        <name>xz-libs</name>
+        <version>5.2.5</version>
+        <release>9.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://tukaani.org/xz/</url>
+        <summary>Libraries for decoding LZMA compression</summary>
+        <description>Libraries for decoding files compressed with LZMA or XZ utils.</description>
+      </application>
+      <application>
+        <name>zlib</name>
+        <version>1.2.11</version>
+        <release>31.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://www.zlib.net/</url>
+        <summary>Compression and decompression library</summary>
+        <description>Zlib is a general-purpose, patent-free, lossless data compression
+library which is used by many different programs.</description>
       </application>
     </applications>
   </operatingsystem>
index 72cddaf8816dd61e7ba6f515e557e916dc302a49..f9ed235c406adc874ea9bd235ea23bba18ffb7f1 100644 (file)
       </filesystem>
     </filesystems>
     <applications>
+      <application>
+        <name>alternatives</name>
+        <version>1.19</version>
+        <release>2.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/fedora-sysv/chkconfig</url>
+        <summary>A tool to maintain symbolic links determining default commands</summary>
+        <description>alternatives creates, removes, maintains and displays information about the
+symbolic links comprising the alternatives system. It is possible for several
+programs fulfilling the same or similar functions to be installed on a single
+system at the same time.</description>
+      </application>
+      <application>
+        <name>audit-libs</name>
+        <version>3.0.8</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://people.redhat.com/sgrubb/audit/</url>
+        <summary>Dynamic library for libaudit</summary>
+        <description>The audit-libs package contains the dynamic libraries needed for
+applications to use the audit framework.</description>
+      </application>
+      <application>
+        <name>authselect</name>
+        <version>1.4.0</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/authselect/authselect</url>
+        <summary>Configures authentication and identity sources from supported profiles</summary>
+        <description>Authselect is designed to be a replacement for authconfig but it takes
+a different approach to configure the system. Instead of letting
+the administrator build the PAM stack with a tool (which may potentially
+end up with a broken configuration), it would ship several tested stacks
+(profiles) that solve a use-case and are well tested and supported.
+At the same time, some obsolete features of authconfig are not
+supported by authselect.</description>
+      </application>
+      <application>
+        <name>authselect-libs</name>
+        <version>1.4.0</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/authselect/authselect</url>
+        <summary>Utility library used by the authselect tool</summary>
+        <description>Common library files for authselect. This package is used by the authselect
+command line tool and any other potential front-ends.</description>
+      </application>
       <application>
         <name>basesystem</name>
         <version>11</version>
-        <release>10.fc33</release>
+        <release>13.fc36</release>
         <arch>noarch</arch>
         <url>(none)</url>
         <summary>The skeleton package which defines a simple Fedora system</summary>
@@ -43,8 +90,8 @@ should never be removed.</description>
       </application>
       <application>
         <name>bash</name>
-        <version>5.0.17</version>
-        <release>2.fc33</release>
+        <version>5.1.16</version>
+        <release>2.fc36</release>
         <arch>x86_64</arch>
         <url>https://www.gnu.org/software/bash</url>
         <summary>The GNU Bourne Again shell</summary>
@@ -52,11 +99,307 @@ should never be removed.</description>
 interpreter that is compatible with the Bourne shell (sh). Bash
 incorporates useful features from the Korn shell (ksh) and the C shell
 (csh). Most sh scripts can be run by bash without modification.</description>
+      </application>
+      <application>
+        <name>bzip2-libs</name>
+        <version>1.0.8</version>
+        <release>11.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://www.bzip.org/</url>
+        <summary>Libraries for applications using bzip2</summary>
+        <description>Libraries for applications using the bzip2 compression format.</description>
+      </application>
+      <application>
+        <name>ca-certificates</name>
+        <version>2021.2.52</version>
+        <release>3.fc36</release>
+        <arch>noarch</arch>
+        <url>https://fedoraproject.org/wiki/CA-Certificates</url>
+        <summary>The Mozilla CA root certificate bundle</summary>
+        <description>This package contains the set of CA certificates chosen by the
+Mozilla Foundation for use with the Internet PKI.</description>
+      </application>
+      <application>
+        <name>coreutils</name>
+        <version>9.1</version>
+        <release>2.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.gnu.org/software/coreutils/</url>
+        <summary>A set of basic GNU tools commonly used in shell scripts</summary>
+        <description>These are the GNU core utilities.  This package is the combination of
+the old GNU fileutils, sh-utils, and textutils packages.</description>
+      </application>
+      <application>
+        <name>coreutils-common</name>
+        <version>9.1</version>
+        <release>2.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.gnu.org/software/coreutils/</url>
+        <summary>coreutils common optional components</summary>
+        <description>Optional though recommended components,
+including documentation and translations.</description>
+      </application>
+      <application>
+        <name>cpio</name>
+        <version>2.13</version>
+        <release>12.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://www.gnu.org/software/cpio/</url>
+        <summary>A GNU archiving program</summary>
+        <description>GNU cpio copies files into or out of a cpio or tar archive.  Archives
+are files which contain a collection of other files plus information
+about them, such as their file name, owner, timestamps, and access
+permissions.  The archive can be another file on the disk, a magnetic
+tape, or a pipe.  GNU cpio supports the following archive formats:  binary,
+old ASCII, new ASCII, crc, HPUX binary, HPUX old ASCII, old tar and POSIX.1
+tar.  By default, cpio creates binary format archives, so that they are
+compatible with older cpio programs.  When it is extracting files from
+archives, cpio automatically recognizes which kind of archive it is reading
+and can read archives created on machines with a different byte-order.
+
+Install cpio if you need a program to manage file archives.</description>
+      </application>
+      <application>
+        <name>cracklib</name>
+        <version>2.9.6</version>
+        <release>28.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://sourceforge.net/projects/cracklib/</url>
+        <summary>A password-checking library</summary>
+        <description>CrackLib tests passwords to determine whether they match certain
+security-oriented characteristics, with the purpose of stopping users
+from choosing passwords that are easy to guess. CrackLib performs
+several tests on passwords: it tries to generate words from a username
+and gecos entry and checks those words against the password; it checks
+for simplistic patterns in passwords; and it checks for the password
+in a dictionary.
+
+CrackLib is actually a library containing a particular C function
+which is used to check the password, as well as other C
+functions. CrackLib is not a replacement for a passwd program; it must
+be used in conjunction with an existing passwd program.
+
+Install the cracklib package if you need a program to check users'
+passwords to see if they are at least minimally secure. If you install
+CrackLib, you will also want to install the cracklib-dicts package.</description>
+      </application>
+      <application>
+        <name>crypto-policies</name>
+        <version>20220428</version>
+        <release>1.gitdfb10ea.fc37</release>
+        <arch>noarch</arch>
+        <url>https://gitlab.com/redhat-crypto/fedora-crypto-policies</url>
+        <summary>System-wide crypto policies</summary>
+        <description>This package provides pre-built configuration files with
+cryptographic policies for various cryptographic back-ends,
+such as SSL/TLS libraries.</description>
+      </application>
+      <application>
+        <name>crypto-policies-scripts</name>
+        <version>20220428</version>
+        <release>1.gitdfb10ea.fc37</release>
+        <arch>noarch</arch>
+        <url>https://gitlab.com/redhat-crypto/fedora-crypto-policies</url>
+        <summary>Tool to switch between crypto policies</summary>
+        <description>This package provides a tool update-crypto-policies, which applies
+the policies provided by the crypto-policies package. These can be
+either the pre-built policies from the base package or custom policies
+defined in simple policy definition files.
+
+The package also provides a tool fips-mode-setup, which can be used
+to enable or disable the system FIPS mode.</description>
+      </application>
+      <application>
+        <name>cryptsetup-libs</name>
+        <version>2.4.3</version>
+        <release>2.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://gitlab.com/cryptsetup/cryptsetup</url>
+        <summary>Cryptsetup shared library</summary>
+        <description>This package contains the cryptsetup shared library, libcryptsetup.</description>
+      </application>
+      <application>
+        <name>curl</name>
+        <version>7.83.1</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://curl.se/</url>
+        <summary>A utility for getting files from remote servers (FTP, HTTP, and others)</summary>
+        <description>curl is a command line tool for transferring data with URL syntax, supporting
+FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, LDAP, LDAPS, FILE, IMAP,
+SMTP, POP3 and RTSP.  curl supports SSL certificates, HTTP POST, HTTP PUT, FTP
+uploading, HTTP form based upload, proxies, cookies, user+password
+authentication (Basic, Digest, NTLM, Negotiate, kerberos...), file transfer
+resume, proxy tunneling and a busload of other useful tricks.</description>
+      </application>
+      <application>
+        <name>cyrus-sasl-lib</name>
+        <version>2.1.28</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.cyrusimap.org/sasl/</url>
+        <summary>Shared libraries needed by applications which use Cyrus SASL</summary>
+        <description>The cyrus-sasl-lib package contains shared libraries which are needed by
+applications which use the Cyrus SASL library.</description>
+      </application>
+      <application>
+        <name>dbus</name>
+        <epoch>1</epoch>
+        <version>1.14.0</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.freedesktop.org/wiki/Software/dbus/</url>
+        <summary>D-BUS message bus</summary>
+        <description>D-BUS is a system for sending messages between applications. It is
+used both for the system-wide message bus service, and as a
+per-user-login-session messaging facility.</description>
+      </application>
+      <application>
+        <name>dbus-broker</name>
+        <version>31</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/bus1/dbus-broker</url>
+        <summary>Linux D-Bus Message Broker</summary>
+        <description>dbus-broker is an implementation of a message bus as defined by the D-Bus
+specification. Its aim is to provide high performance and reliability, while
+keeping compatibility to the D-Bus reference implementation. It is exclusively
+written for Linux systems, and makes use of many modern features provided by
+recent Linux kernel releases.</description>
+      </application>
+      <application>
+        <name>dbus-common</name>
+        <epoch>1</epoch>
+        <version>1.14.0</version>
+        <release>1.fc37</release>
+        <arch>noarch</arch>
+        <url>https://www.freedesktop.org/wiki/Software/dbus/</url>
+        <summary>D-BUS message bus configuration</summary>
+        <description>The dbus-common package provides the configuration and setup files for D-Bus
+implementations to provide a System and User Message Bus.</description>
+      </application>
+      <application>
+        <name>device-mapper</name>
+        <version>1.02.175</version>
+        <release>7.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://www.sourceware.org/dm/</url>
+        <summary>Device mapper utility</summary>
+        <description>This package contains the supporting userspace utility, dmsetup,
+for the kernel device-mapper.</description>
+      </application>
+      <application>
+        <name>device-mapper-libs</name>
+        <version>1.02.175</version>
+        <release>7.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://sourceware.org/lvm2/</url>
+        <summary>Device-mapper shared library</summary>
+        <description>This package contains the device-mapper shared library, libdevmapper.</description>
+      </application>
+      <application>
+        <name>diffutils</name>
+        <version>3.8</version>
+        <release>2.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://www.gnu.org/software/diffutils/diffutils.html</url>
+        <summary>GNU collection of diff utilities</summary>
+        <description>Diffutils includes four utilities: diff, cmp, diff3 and sdiff. Diff
+compares two files and shows the differences, line by line.  The cmp
+command shows the offset and line numbers where two files differ, or
+cmp can show the characters that differ between the two files.  The
+diff3 command shows the differences between three files.  Diff3 can be
+used when two people have made independent changes to a common
+original; diff3 can produce a merged file that contains both sets of
+changes and warnings about conflicts.  The sdiff command can be used
+to merge two files interactively.
+
+Install diffutils if you need to compare text files.</description>
+      </application>
+      <application>
+        <name>dracut</name>
+        <version>056</version>
+        <release>2.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://dracut.wiki.kernel.org/</url>
+        <summary>Initramfs generator using udev</summary>
+        <description>dracut contains tools to create bootable initramfses for the Linux
+kernel. Unlike other implementations, dracut hard-codes as little
+as possible into the initramfs. dracut contains various modules which
+are driven by the event-based udev. Having root on MD, DM, LVM2, LUKS
+is supported as well as NFS, iSCSI, NBD, FCoE with the dracut-network
+package.</description>
+      </application>
+      <application>
+        <name>elfutils-debuginfod-client</name>
+        <version>0.187</version>
+        <release>4.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://elfutils.org/</url>
+        <summary>Library and command line client for build-id HTTP ELF/DWARF server</summary>
+        <description>The elfutils-debuginfod-client package contains shared libraries
+dynamically loaded from -ldw, which use a debuginfod service
+to look up debuginfo and associated data. Also includes a
+command-line frontend.</description>
+      </application>
+      <application>
+        <name>elfutils-default-yama-scope</name>
+        <version>0.187</version>
+        <release>4.fc37</release>
+        <arch>noarch</arch>
+        <url>http://elfutils.org/</url>
+        <summary>Default yama attach scope sysctl setting</summary>
+        <description>Yama sysctl setting to enable default attach scope settings
+enabling programs to use ptrace attach, access to
+/proc/PID/{mem,personality,stack,syscall}, and the syscalls
+process_vm_readv and process_vm_writev which are used for
+interprocess services, communication and introspection
+(like synchronisation, signaling, debugging, tracing and
+profiling) of processes.</description>
+      </application>
+      <application>
+        <name>elfutils-libelf</name>
+        <version>0.187</version>
+        <release>4.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://elfutils.org/</url>
+        <summary>Library to read and write ELF files</summary>
+        <description>The elfutils-libelf package provides a DSO which allows reading and
+writing ELF files on a high level.  Third party programs depend on
+this package to read internals of ELF files.  The programs of the
+elfutils package use it also to generate new ELF files.</description>
+      </application>
+      <application>
+        <name>elfutils-libs</name>
+        <version>0.187</version>
+        <release>4.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://elfutils.org/</url>
+        <summary>Libraries to handle compiled objects</summary>
+        <description>The elfutils-libs package contains libraries which implement DWARF, ELF,
+and machine-specific ELF handling and process introspection.  These
+libraries are used by the programs in the elfutils package.  The
+elfutils-devel package enables building other programs using these
+libraries.</description>
+      </application>
+      <application>
+        <name>expat</name>
+        <version>2.4.8</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://libexpat.github.io/</url>
+        <summary>An XML parser library</summary>
+        <description>This is expat, the C library for parsing XML, written by James Clark. Expat
+is a stream oriented XML parser. This means that you register handlers with
+the parser prior to starting the parse. These handlers are called when the
+parser discovers the associated structures in the document being parsed. A
+start tag is an example of the kind of structures for which you may
+register handlers.</description>
       </application>
       <application>
         <name>fedora-gpg-keys</name>
-        <version>33</version>
-        <release>3</release>
+        <version>37</version>
+        <release>0.2</release>
         <arch>noarch</arch>
         <url>https://fedoraproject.org/</url>
         <summary>Fedora RPM keys</summary>
@@ -64,8 +407,8 @@ incorporates useful features from the Korn shell (ksh) and the C shell
       </application>
       <application>
         <name>fedora-release</name>
-        <version>33</version>
-        <release>3</release>
+        <version>37</version>
+        <release>0.5</release>
         <arch>noarch</arch>
         <url>https://fedoraproject.org/</url>
         <summary>Fedora release files</summary>
@@ -74,8 +417,8 @@ and systemd preset files that determine which services are enabled by default.</
       </application>
       <application>
         <name>fedora-release-common</name>
-        <version>33</version>
-        <release>3</release>
+        <version>37</version>
+        <release>0.5</release>
         <arch>noarch</arch>
         <url>https://fedoraproject.org/</url>
         <summary>Fedora release files</summary>
@@ -83,8 +426,8 @@ and systemd preset files that determine which services are enabled by default.</
       </application>
       <application>
         <name>fedora-release-identity-basic</name>
-        <version>33</version>
-        <release>3</release>
+        <version>37</version>
+        <release>0.5</release>
         <arch>noarch</arch>
         <url>https://fedoraproject.org/</url>
         <summary>Package providing the basic Fedora identity</summary>
@@ -93,17 +436,48 @@ itself as a particular Edition or Spin.</description>
       </application>
       <application>
         <name>fedora-repos</name>
-        <version>33</version>
-        <release>3</release>
+        <version>37</version>
+        <release>0.2</release>
         <arch>noarch</arch>
         <url>https://fedoraproject.org/</url>
         <summary>Fedora package repositories</summary>
         <description>Fedora package repository files for yum and dnf along with gpg public keys.</description>
       </application>
+      <application>
+        <name>fedora-repos-rawhide</name>
+        <version>37</version>
+        <release>0.2</release>
+        <arch>noarch</arch>
+        <url>https://fedoraproject.org/</url>
+        <summary>Rawhide repo definitions</summary>
+        <description>This package provides the rawhide repo definitions.</description>
+      </application>
+      <application>
+        <name>file</name>
+        <version>5.41</version>
+        <release>5.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.darwinsys.com/file/</url>
+        <summary>Utility for determining file types</summary>
+        <description>The file command is used to identify a particular file according to the
+type of data contained by the file.  File can identify many different
+file types, including ELF binaries, system libraries, RPM packages, and
+different graphics formats.</description>
+      </application>
+      <application>
+        <name>file-libs</name>
+        <version>5.41</version>
+        <release>5.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.darwinsys.com/file/</url>
+        <summary>Libraries for applications using libmagic</summary>
+        <description>
+Libraries for applications using libmagic.</description>
+      </application>
       <application>
         <name>filesystem</name>
-        <version>3.14</version>
-        <release>3.fc33</release>
+        <version>3.16</version>
+        <release>2.fc36</release>
         <arch>x86_64</arch>
         <url>https://pagure.io/filesystem</url>
         <summary>The basic directory layout for a Linux system</summary>
@@ -112,10 +486,100 @@ on a Linux system. Filesystem contains the basic directory layout
 for a Linux operating system, including the correct permissions for
 the directories.</description>
       </application>
+      <application>
+        <name>findutils</name>
+        <epoch>1</epoch>
+        <version>4.9.0</version>
+        <release>1.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://www.gnu.org/software/findutils/</url>
+        <summary>The GNU versions of find utilities (find and xargs)</summary>
+        <description>The findutils package contains programs which will help you locate
+files on your system.  The find utility searches through a hierarchy
+of directories looking for files which match a certain set of criteria
+(such as a file name pattern).  The xargs utility builds and executes
+command lines from standard input arguments (usually lists of file
+names generated by the find command).
+
+You should install findutils because it includes tools that are very
+useful for finding things on your system.</description>
+      </application>
+      <application>
+        <name>fuse-libs</name>
+        <version>2.9.9</version>
+        <release>14.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://fuse.sf.net</url>
+        <summary>File System in Userspace (FUSE) v2 libraries</summary>
+        <description>Devel With FUSE it is possible to implement a fully functional filesystem in a
+userspace program. This package contains the FUSE v2 libraries.</description>
+      </application>
+      <application>
+        <name>gawk</name>
+        <version>5.1.1</version>
+        <release>3.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.gnu.org/software/gawk/</url>
+        <summary>The GNU version of the AWK text processing utility</summary>
+        <description>The gawk package contains the GNU version of AWK text processing utility. AWK is
+a programming language designed for text processing and typically used as a data
+extraction and reporting tool.
+
+The gawk utility can be used to do quick and easy text pattern matching,
+extracting or reformatting. It is considered to be a standard Linux tool for
+text processing.</description>
+      </application>
+      <application>
+        <name>gawk-all-langpacks</name>
+        <version>5.1.1</version>
+        <release>3.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.gnu.org/software/gawk/</url>
+        <summary>Additional localisation files for gawk utility</summary>
+        <description>The base package of gawk supports only the english localisation. This subpackage
+contains additional localisation files.</description>
+      </application>
+      <application>
+        <name>gdbm-libs</name>
+        <epoch>1</epoch>
+        <version>1.22</version>
+        <release>2.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://www.gnu.org/software/gdbm/</url>
+        <summary>Libraries files for gdbm</summary>
+        <description>Libraries for the Gdbm GNU database indexing library</description>
+      </application>
+      <application>
+        <name>gettext</name>
+        <version>0.21</version>
+        <release>13.fc37.0.20220203</release>
+        <arch>x86_64</arch>
+        <url>https://www.gnu.org/software/gettext/</url>
+        <summary>GNU libraries and utilities for producing multi-lingual messages</summary>
+        <description>The GNU gettext package provides a set of tools and documentation for
+producing multi-lingual messages in programs. Tools include a set of
+conventions about how programs should be written to support message
+catalogs, a directory and file naming organization for the message
+catalogs, a runtime library which supports the retrieval of translated
+messages, and stand-alone programs for handling the translatable and
+the already translated strings. Gettext provides an easy to use
+library and tools for creating, using, and modifying natural language
+catalogs and is a powerful and simple method for internationalizing
+programs.</description>
+      </application>
+      <application>
+        <name>gettext-libs</name>
+        <version>0.21</version>
+        <release>13.fc37.0.20220203</release>
+        <arch>x86_64</arch>
+        <url>https://www.gnu.org/software/gettext/</url>
+        <summary>Libraries for gettext</summary>
+        <description>This package contains libraries used internationalization support.</description>
+      </application>
       <application>
         <name>glibc</name>
-        <version>2.32</version>
-        <release>4.fc33</release>
+        <version>2.35.9000</version>
+        <release>20.fc37</release>
         <arch>x86_64</arch>
         <url>http://www.gnu.org/software/glibc/</url>
         <summary>The GNU libc libraries</summary>
@@ -127,115 +591,1670 @@ contains the most important sets of shared libraries: the standard C
 library and the standard math library. Without these two libraries, a
 Linux system will not function.</description>
       </application>
-      <application>
-        <name>glibc-all-langpacks</name>
-        <version>2.32</version>
-        <release>4.fc33</release>
-        <arch>x86_64</arch>
-        <url>http://www.gnu.org/software/glibc/</url>
-        <summary>All language packs for glibc.</summary>
-      </application>
       <application>
         <name>glibc-common</name>
-        <version>2.32</version>
-        <release>4.fc33</release>
+        <version>2.35.9000</version>
+        <release>20.fc37</release>
         <arch>x86_64</arch>
         <url>http://www.gnu.org/software/glibc/</url>
         <summary>Common binaries and locale data for glibc</summary>
         <description>The glibc-common package includes common binaries for the GNU libc
 libraries, as well as national language (locale) support.</description>
+      </application>
+      <application>
+        <name>glibc-gconv-extra</name>
+        <version>2.35.9000</version>
+        <release>20.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://www.gnu.org/software/glibc/</url>
+        <summary>All iconv converter modules for glibc.</summary>
+        <description>This package contains all iconv converter modules built in glibc.</description>
+      </application>
+      <application>
+        <name>glibc-minimal-langpack</name>
+        <version>2.35.9000</version>
+        <release>20.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://www.gnu.org/software/glibc/</url>
+        <summary>Minimal language packs for glibc.</summary>
+        <description>This is a Meta package that is used to install minimal language packs.
+This package ensures you can use C, POSIX, or C.UTF-8 locales, but
+nothing else. It is designed for assembling a minimal system.</description>
+      </application>
+      <application>
+        <name>gmp</name>
+        <epoch>1</epoch>
+        <version>6.2.1</version>
+        <release>2.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://gmplib.org/</url>
+        <summary>GNU arbitrary precision library</summary>
+        <description>The gmp package contains GNU MP, a library for arbitrary precision
+arithmetic, signed integers operations, rational numbers and floating
+point numbers. GNU MP is designed for speed, for both small and very
+large operands. GNU MP is fast because it uses fullwords as the basic
+arithmetic type, it uses fast algorithms, it carefully optimizes
+assembly code for many CPUs' most common inner loops, and it generally
+emphasizes speed over simplicity/elegance in its operations.
+
+Install the gmp package if you need a fast arbitrary precision
+library.</description>
       </application>
       <application>
         <name>gpg-pubkey</name>
-        <version>9570ff31</version>
-        <release>5e3006fb</release>
+        <version>eb10b464</version>
+        <release>6202d9c6</release>
         <arch>(none)</arch>
         <url>(none)</url>
-        <summary>Fedora (33) &lt;fedora-33-primary@fedoraproject.org&gt; public key</summary>
+        <summary>Fedora (38) &lt;fedora-38-primary@fedoraproject.org&gt; public key</summary>
         <description>-----BEGIN PGP PUBLIC KEY BLOCK-----
-Version: rpm-4.16.1.2 (NSS-3)
-
-mQINBF4wBvsBEADQmcGbVUbDRUoXADReRmOOEMeydHghtKC9uRs9YNpGYZIB+bie
-bGYZmflQayfh/wEpO2W/IZfGpHPL42V7SbyvqMjwNls/fnXsCtf4LRofNK8Qd9fN
-kYargc9R7BEz/mwXKMiRQVx+DzkmqGWy2gq4iD0/mCyf5FdJCE40fOWoIGJXaOI1
-Tz1vWqKwLS5T0dfmi9U4Tp/XsKOZGvN8oi5h0KmqFk7LEZr1MXarhi2Va86sgxsF
-QcZEKfu5tgD0r00vXzikoSjn3qA5JW5FW07F1pGP4bF5f9J3CZbQyOjTSWMmmfTm
-2d2BURWzaDiJN9twY2yjzkoOMuPdXXvovg7KxLcQerKT+FbKbq8DySJX2rnOA77k
-UG4c9BGf/L1uBkAT8dpHLk6Uf5BfmypxUkydSWT1xfTDnw1MqxO0MsLlAHOR3J7c
-oW9kLcOLuCQn1hBEwfZv7VSWBkGXSmKfp0LLIxAFgRtv+Dh+rcMMRdJgKr1V3FU+
-rZ1+ZAfYiBpQJFPjv70vx+rGEgS801D3PJxBZUEy4Ic4ZYaKNhK9x9PRQuWcIBuW
-6eTe/6lKWZeyxCumLLdiS75mF2oTcBaWeoc3QxrPRV15eDKeYJMbhnUai/7lSrhs
-EWCkKR1RivgF4slYmtNE5ZPGZ/d61zjwn2xi4xNJVs8q9WRPMpHp0vCyMwARAQAB
-tDFGZWRvcmEgKDMzKSA8ZmVkb3JhLTMzLXByaW1hcnlAZmVkb3JhcHJvamVjdC5v
-cmc+iQI4BBMBAgAiBQJeMAb7AhsPBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAK
-CRBJ/XdJlXD/MZm2D/9kriL43vd3+0DNMeA82n2v9mSR2PQqKny39xNlYPyy/1yZ
-P/KXoa4NYSCA971LSd7lv4n/h5bEKgGHxZfttfOzOnWMVSSTfjRyM/df/NNzTUEV
-7ORA5GW18g8PEtS7uRxVBf3cLvWu5q+8jmqES5HqTAdGVcuIFQeBXFN8Gy1Jinuz
-AH8rJSdkUeZ0cehWbERq80BWM9dhad5dW+/+Gv0foFBvP15viwhWqajr8V0B8es+
-2/tHI0k86FAujV5i0rrXl5UOoLilO57QQNDZH/qW9GsHwVI+2yecLstpUNLq+EZC
-GqTZCYoxYRpl0gAMbDLztSL/8Bc0tJrCRG3tavJotFYlgUK60XnXlQzRkh9rgsfT
-EXbQifWdQMMogzjCJr0hzJ+V1d0iozdUxB2ZEgTjukOvatkB77DY1FPZRkSFIQs+
-fdcjazDIBLIxwJu5QwvTNW8lOLnJ46g4sf1WJoUdNTbR0BaC7HHj1inVWi0p7IuN
-66EPGzJOSjLK+vW+J0ncPDEgLCV74RF/0nR5fVTdrmiopPrzFuguHf9S9gYI3Zun
-Yl8FJUu4kRO6JPPTicUXWX+8XZmE94aK14RCJL23nOSi8T1eW8JLW43dCBRO8QUE
-Aso1t2pypm/1zZexJdOV8yGME3g5l2W6PLgpz58DBECgqc/kda+VWgEAp7rO2A==
-=EPL3
+Version: rpm-4.17.0 (NSS-3)
+
+mQINBGIC2cYBEADJye1aE0AR17qwj6wsHWlCQlcihmqkL8s4gbOk1IevBbH4iXJx
+lu6bN+NhTcCCX6eHmaL5Pwb/bpkMmLR+/r1D2cLDK24YzvN6kJnwRQUTf2dbqYmg
+mNBgIMm+kAabBZPwUHUzyQ9CT/WJpYr1OYu8JIkdxF35nrPewnnOUUqxqbi8fXRQ
+gskSLF8UveiOjFIqmWwlPwT1UtnevAaF80UGQlkwFvqjjh4b9vKY2gHMAQwt+wg5
+HFFCSwSrnd88ZoDb3pKvDMeurYUiPzF5f2r+ziVkMuaSNckvp58uge7HvyqQPAdJ
+ZRswCCxhUAo9VqkNfB4Ud25ASyalk9jOE3HB8E35gFfPXvuX1n15THXNcwMEiybk
+Omne2YwXL8ShGNr5otjqywThMrrqcl2g/pJVTcpDHTR5Hn9YRp+GHlYLjyEr+/x7
+xM19y9ca9GUiJqDbEREHcKKIhYiGmcIjjcJvei/3C/aM4pqeGFJBbVSnw3qeMxH/
+6ArAMA1sAdShCkv2YjlcF0r4uoCjXdS3xrKLz9PSCquot7RySnOE9TZ7flfJll7Z
+q+lNaSeJg7FK8VWSUb9Lit6VEYVbzWKzespDDbujrHbFpydyq8gXurk7bSR2w0te
+gsmytQqT/w1z2bydgGF6SfY9Px0wuA8GQKr48l5Bhdc6+vHHFqPKzz0PVQARAQAB
+tDFGZWRvcmEgKDM4KSA8ZmVkb3JhLTM4LXByaW1hcnlAZmVkb3JhcHJvamVjdC5v
+cmc+iQJOBBMBCAA4FiEEalG7q7o9VGe2FxIhgJqNfOsQtGQFAmIC2cYCGw8FCwkI
+BwIGFQoJCAsCBBYCAwECHgECF4AACgkQgJqNfOsQtGScyw/7BLmD4Fwi4QZY94zl
+vlJdNufZRavOemSIVVDHoCr8pQBAdrvoMypxJd5zM4ODIqFsjdYpFti+Tkeq4/4U
+25UoLPEOtU8UDt2uq7LqfdCxspaj7VyXAJIkpf7wEvLS4Jzo+YaMIlsd0dCrMXTM
+vhu4gKpBFW6C+gGlmuDyTJbyrf7ilytgVzVtIfRrT7XffylviIlZHwKm43UDjvzX
+YEl3EAFR1RjATwXMy2aJh7GCNsz+fKs+7YRKQUhpMF5un/2pyNJO+LbVGGwGZvga
+K9Kfsg/4r1ync4nDDD1dadKIHhobDeiJ9uZLoBvvVDz7Ywu7q/vv4zIPxstYBNq4
+6fLKDtYXuJCK0EV9Qy4ox67t0UGlaRGH8y5YUqOI10xH7iQej0xWlSc8w2dKhPz8
+z9XLv2OMK+PvqvflhFHhWkqEoQRqTu0TVD0fLLe4lqieJlqZcJqW0F9G/vNSSWmf
+POLa/Nim71gL2fPjCJOIRV4K/cJSyBmu5NchG7dHD5sUtJxZ4TFSuepaBZ8cPK1x
+e26TaCBqoUWgUXWmw+P89aOpYOJYEFfT/VAm2Ywn+c1EFUmD+30wQ7aP/RUFl94z
+n0BjqsWDnCKVFHydZ0TZSpeADmXMg2VYZPcp/cQR1KjoBoDxAscis7b1XPQUg7CB
+zquq5jBVAnsNIhs7g47GWKyDUJM=
+=aCLl
 -----END PGP PUBLIC KEY BLOCK-----
 </description>
       </application>
       <application>
-        <name>libgcc</name>
-        <version>10.2.1</version>
-        <release>9.fc33</release>
+        <name>gpg-pubkey</name>
+        <version>5323552a</version>
+        <release>6112bcdc</release>
+        <arch>(none)</arch>
+        <url>(none)</url>
+        <summary>Fedora (37) &lt;fedora-37-primary@fedoraproject.org&gt; public key</summary>
+        <description>-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: rpm-4.17.0 (NSS-3)
+
+mQINBGESvNwBEAC7HsCDTlugVeDSMFX6aW3zAPFMfvBssNj+89fdmbxcI9t7UY6f
+HvkkGziUET8e+9jB8R2/wXQCGOw1J+sfmwO4aN0LdVQjhKvVNj+F5jWt3m5FAIBa
+OTWS6Kvqw2ECTpH7fD86541eK3BuCni6d5U3PCd73t976FcUmpQ/1AthqMksM0Jz
+cJapvNmLTCR0NZ2XyyLmn/K1hgNXe8G5j0cSrJiY+Zpz5aQkT96j96Jm6W2A+tBI
+icU4n6V4vlj2TxmCumtXJGXGBGJnof/dCgh45aqi+sk5c429ns+5sooYcaEJojj6
+FYSITv10l+az6ZMJz/j61VYSkhMY8hQ4Wd+yL2JVzLE9N9V0L95sX1yEZ5ILmzwx
+oRKe4WHSBE6yMxNWobv7hmC+3ZC5mLPaEDS/g/0xuQj9Sy9eT2mhhFPxOv29YQ+P
+sC3zXHJMMT0tlGd72PVHQQ0JYONfMhcC+7AHGFGz8p4/wor2jIFG1ouqE6Lfzm8o
+XWZMYm3AydlrP/xkYaoWNE3jL/+dskSBr/Yz7ZzlkAqH9lb1HKnXQLTrw6gz6pmI
+KufSDXjEFNxnFI/9gMlshJtk5+QSDzezmxFm+NMviSvDUNAVIzrU1D84dauBYph4
+OrJVeECQHEotny/I53AdlVwLYB4TWkObzTs6vtV7Pz1TK2CmHpe3UW72xwARAQAB
+tDFGZWRvcmEgKDM3KSA8ZmVkb3JhLTM3LXByaW1hcnlAZmVkb3JhcHJvamVjdC5v
+cmc+iQJOBBMBCAA4FiEErLXuToMcdLt8Fo0n9VrT+1MjVSoFAmESvNwCGw8FCwkI
+BwIGFQoJCAsCBBYCAwECHgECF4AACgkQ9VrT+1MjVSoPMhAAist7kK/YtcyBL/dt
+P55hPrkJT6Ay+e2Dvt4Pixe4iT32Y3jG12aoX2LY//mxVOOpV+EhXYTTb5aLt2Jj
+a8/qCKJFk7zuCOxa1hgdRcjoR7ZbU0lNjD9mMCax/YT9QafcaMEib/FlknP3g1SN
+GRSKLObTJd6BbtZXCE80JRIX+Dy6+/Oz7LXRXeKpiimhlXT1wuTaqAJEtuHdQvg7
+dkL4DzAJ2FiURVd5gvgo266WaCMafJjFRrSGHJm0c+V+0Z9NsuH80JbPm+rCUh5U
+E9PMyztqlqtldtqc1+aZ1iUbVuXY059BUmlAhmf5sAlBktY+hEabH/4kmfGccbBL
+TyBIn03Y9q9173okZSUe6q16m/hbbWI8dwkSpIADZbGGJbRi8PJpCg9y6KI355qD
+atE2irleoy6eXqpKa+uPTRBk7i/r6jDoA+u+tZyFfcEnwvSWP8cN1j5mNklvITZl
+YF1n5b3fejkZVdOmRZQNkyzMxYEd4UZFQZNYrx0nltAagRS8b5ikqNk2UTl+dyBG
+k9gLOSZhAa2JdmAqwe9rT69jaa4kZMLlxPPC3246s83t0s7lp7vF+zLPfPSvxpsU
+tg+fuT+OFKWYdBFF7VkEA+wezHAznIP6TPyQXbBpkzE889/hOXy4BYs0wy8Bpda/
+Ve2Ba329f99dSCZKImi5DPCxJY4=
+=ZmVd
+-----END PGP PUBLIC KEY BLOCK-----
+</description>
+      </application>
+      <application>
+        <name>grep</name>
+        <version>3.7</version>
+        <release>2.fc36</release>
         <arch>x86_64</arch>
-        <url>http://gcc.gnu.org</url>
-        <summary>GCC version 10 shared support library</summary>
-        <description>This package contains GCC shared support library which is needed
-e.g. for exception handling support.</description>
+        <url>https://www.gnu.org/software/grep/</url>
+        <summary>Pattern matching utilities</summary>
+        <description>The GNU versions of commonly used grep utilities. Grep searches through
+textual input for lines which contain a match to a specified pattern and then
+prints the matching lines. GNU's grep utilities include grep, egrep and fgrep.
+
+GNU grep is needed by many scripts, so it shall be installed on every system.</description>
       </application>
       <application>
-        <name>ncurses-base</name>
-        <version>6.2</version>
-        <release>3.20200222.fc33</release>
+        <name>grub2-common</name>
+        <epoch>1</epoch>
+        <version>2.06</version>
+        <release>41.fc37</release>
         <arch>noarch</arch>
-        <url>https://invisible-island.net/ncurses/ncurses.html</url>
-        <summary>Descriptions of common terminals</summary>
-        <description>This package contains descriptions of common terminals. Other terminal
-descriptions are included in the ncurses-term package.</description>
+        <url>http://www.gnu.org/software/grub/</url>
+        <summary>grub2 common layout</summary>
+        <description>This package provides some directories which are required by various grub2
+subpackages.</description>
       </application>
       <application>
-        <name>ncurses-libs</name>
-        <version>6.2</version>
-        <release>3.20200222.fc33</release>
+        <name>grub2-tools</name>
+        <epoch>1</epoch>
+        <version>2.06</version>
+        <release>41.fc37</release>
         <arch>x86_64</arch>
-        <url>https://invisible-island.net/ncurses/ncurses.html</url>
-        <summary>Ncurses libraries</summary>
-        <description>The curses library routines are a terminal-independent method of
-updating character screens with reasonable optimization.  The ncurses
-(new curses) library is a freely distributable replacement for the
-discontinued 4.4 BSD classic curses library.
+        <url>http://www.gnu.org/software/grub/</url>
+        <summary>Support tools for GRUB.</summary>
+        <description>
+The GRand Unified Bootloader (GRUB) is a highly configurable and
+customizable bootloader with modular architecture.  It supports a rich
+variety of kernel formats, file systems, computer architectures and
+hardware devices.
 
-This package contains the ncurses libraries.</description>
+This subpackage provides tools for support of all platforms.</description>
       </application>
       <application>
-        <name>setup</name>
-        <version>2.13.7</version>
-        <release>2.fc33</release>
-        <arch>noarch</arch>
-        <url>https://pagure.io/setup/</url>
-        <summary>A set of system configuration and setup files</summary>
-        <description>The setup package contains a set of important system configuration and
-setup files, such as passwd, group, and profile.</description>
+        <name>grub2-tools-minimal</name>
+        <epoch>1</epoch>
+        <version>2.06</version>
+        <release>41.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://www.gnu.org/software/grub/</url>
+        <summary>Support tools for GRUB.</summary>
+        <description>
+The GRand Unified Bootloader (GRUB) is a highly configurable and
+customizable bootloader with modular architecture.  It supports a rich
+variety of kernel formats, file systems, computer architectures and
+hardware devices.
+
+This subpackage provides tools for support of all platforms.</description>
       </application>
       <application>
-        <name>tzdata</name>
-        <version>2021a</version>
-        <release>1.fc33</release>
+        <name>grubby</name>
+        <version>8.40</version>
+        <release>60.fc37</release>
+        <arch>x86_64</arch>
+        <url>(none)</url>
+        <summary>Command line tool for updating bootloader configs</summary>
+        <description>This package provides a grubby compatibility script that manages
+BootLoaderSpec files and is meant to be backward compatible with
+the previous grubby tool.</description>
+      </application>
+      <application>
+        <name>gzip</name>
+        <version>1.12</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.gzip.org/</url>
+        <summary>GNU data compression program</summary>
+        <description>The gzip package contains the popular GNU gzip data compression
+program. Gzipped files have a .gz extension.
+
+Gzip should be installed on your system, because it is a
+very commonly used data compression program.</description>
+      </application>
+      <application>
+        <name>json-c</name>
+        <version>0.16</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/json-c/json-c</url>
+        <summary>JSON implementation in C</summary>
+        <description>JSON-C implements a reference counting object model that allows you
+to easily construct JSON objects in C, output them as JSON formatted
+strings and parse JSON formatted strings back into the C representation
+of JSON objects.  It aims to conform to RFC 7159.</description>
+      </application>
+      <application>
+        <name>kbd</name>
+        <version>2.4.0</version>
+        <release>9.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://www.kbd-project.org/</url>
+        <summary>Tools for configuring the console (keyboard, virtual terminals, etc.)</summary>
+        <description>The kbd package contains tools for managing a Linux
+system's console's behavior, including the keyboard, the screen
+fonts, the virtual terminals and font files.</description>
+      </application>
+      <application>
+        <name>kbd-misc</name>
+        <version>2.4.0</version>
+        <release>9.fc36</release>
         <arch>noarch</arch>
-        <url>https://www.iana.org/time-zones</url>
-        <summary>Timezone data</summary>
-        <description>This package contains data files with rules for various timezones around
-the world.</description>
+        <url>http://www.kbd-project.org/</url>
+        <summary>Data for kbd package</summary>
+        <description>The kbd-misc package contains data for kbd package - console fonts,
+keymaps etc. Please note that kbd-misc is not helpful without kbd.</description>
+      </application>
+      <application>
+        <name>kernel</name>
+        <version>5.19.0</version>
+        <release>0.rc1.14.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.kernel.org/</url>
+        <summary>The Linux kernel</summary>
+        <description>The kernel meta package</description>
+      </application>
+      <application>
+        <name>kernel-core</name>
+        <version>5.19.0</version>
+        <release>0.rc1.14.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.kernel.org/</url>
+        <summary>The Linux kernel</summary>
+        <description>The kernel package contains the Linux kernel (vmlinuz), the core of any
+Linux operating system.  The kernel handles the basic functions
+of the operating system: memory allocation, process allocation, device
+input and output, etc.</description>
+      </application>
+      <application>
+        <name>kernel-modules</name>
+        <version>5.19.0</version>
+        <release>0.rc1.14.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.kernel.org/</url>
+        <summary>kernel modules to match the core kernel</summary>
+        <description>This package provides commonly used kernel modules for the core kernel package.</description>
+      </application>
+      <application>
+        <name>keyutils-libs</name>
+        <version>1.6.1</version>
+        <release>4.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://people.redhat.com/~dhowells/keyutils/</url>
+        <summary>Key utilities library</summary>
+        <description>This package provides a wrapper library for the key management facility system
+calls.</description>
+      </application>
+      <application>
+        <name>kmod</name>
+        <version>29</version>
+        <release>7.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://git.kernel.org/pub/scm/utils/kernel/kmod/kmod.git</url>
+        <summary>Linux kernel module management utilities</summary>
+        <description>The kmod package provides various programs needed for automatic
+loading and unloading of modules under 2.6, 3.x, and later kernels, as well
+as other module management programs. Device drivers and filesystems are two
+examples of loaded and unloaded modules.</description>
+      </application>
+      <application>
+        <name>kmod-libs</name>
+        <version>29</version>
+        <release>7.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://git.kernel.org/pub/scm/utils/kernel/kmod/kmod.git</url>
+        <summary>Libraries to handle kernel module loading and unloading</summary>
+        <description>The kmod-libs package provides runtime libraries for any application that
+wishes to load or unload Linux kernel modules from the running system.</description>
+      </application>
+      <application>
+        <name>kpartx</name>
+        <version>0.8.9</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://christophe.varoqui.free.fr/</url>
+        <summary>Partition device manager for device-mapper devices</summary>
+        <description>kpartx manages partition creation and removal for device-mapper devices.</description>
+      </application>
+      <application>
+        <name>krb5-libs</name>
+        <version>1.19.2</version>
+        <release>9.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://web.mit.edu/kerberos/www/</url>
+        <summary>The non-admin shared libraries used by Kerberos 5</summary>
+        <description>Kerberos is a network authentication system. The krb5-libs package
+contains the shared libraries needed by Kerberos 5. If you are using
+Kerberos, you need to install this package.</description>
+      </application>
+      <application>
+        <name>libacl</name>
+        <version>2.3.1</version>
+        <release>3.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://savannah.nongnu.org/projects/acl</url>
+        <summary>Dynamic library for access control list support</summary>
+        <description>This package contains the libacl.so dynamic library which contains
+the POSIX 1003.1e draft standard 17 functions for manipulating access
+control lists.</description>
+      </application>
+      <application>
+        <name>libarchive</name>
+        <version>3.6.1</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.libarchive.org/</url>
+        <summary>A library for handling streaming archive formats</summary>
+        <description>Libarchive is a programming library that can create and read several different
+streaming archive formats, including most popular tar variants, several cpio
+formats, and both BSD and GNU ar variants. It can also write shar archives and
+read ISO9660 CDROM images and ZIP archives.</description>
+      </application>
+      <application>
+        <name>libargon2</name>
+        <version>20171227</version>
+        <release>9.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/P-H-C/phc-winner-argon2</url>
+        <summary>The password-hashing library</summary>
+        <description>Argon2 is a password-hashing function that summarizes the state of the art
+in the design of memory-hard functions and can be used to hash passwords
+for credential storage, key derivation, or other applications.</description>
+      </application>
+      <application>
+        <name>libattr</name>
+        <version>2.5.1</version>
+        <release>4.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://savannah.nongnu.org/projects/attr</url>
+        <summary>Dynamic library for extended attribute support</summary>
+        <description>This package contains the libattr.so dynamic library which contains
+the extended attribute system calls and library functions.</description>
+      </application>
+      <application>
+        <name>libblkid</name>
+        <version>2.38</version>
+        <release>3.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://en.wikipedia.org/wiki/Util-linux</url>
+        <summary>Block device ID library</summary>
+        <description>This is block device identification library, part of util-linux.</description>
+      </application>
+      <application>
+        <name>libbpf</name>
+        <epoch>2</epoch>
+        <version>0.8.0</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/libbpf/libbpf</url>
+        <summary>Libbpf library</summary>
+        <description>A mirror of bpf-next linux tree bpf-next/tools/lib/bpf directory plus its
+supporting header files. The version of the package reflects the version of
+ABI.</description>
+      </application>
+      <application>
+        <name>libbrotli</name>
+        <version>1.0.9</version>
+        <release>7.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/google/brotli</url>
+        <summary>Library for brotli lossless compression algorithm</summary>
+        <description>Brotli is a generic-purpose lossless compression algorithm that compresses
+data using a combination of a modern variant of the LZ77 algorithm, Huffman
+coding and 2nd order context modeling, with a compression ratio comparable
+to the best currently available general-purpose compression methods.
+It is similar in speed with deflate but offers more dense compression.</description>
+      </application>
+      <application>
+        <name>libcap</name>
+        <version>2.48</version>
+        <release>4.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://sites.google.com/site/fullycapable/</url>
+        <summary>Library for getting and setting POSIX.1e capabilities</summary>
+        <description>libcap is a library for getting and setting POSIX.1e (formerly POSIX 6)
+draft 15 capabilities.</description>
+      </application>
+      <application>
+        <name>libcap-ng</name>
+        <version>0.8.3</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://people.redhat.com/sgrubb/libcap-ng/</url>
+        <summary>Alternate posix capabilities library</summary>
+        <description>Libcap-ng is a library that makes using posix capabilities easier</description>
+      </application>
+      <application>
+        <name>libcbor</name>
+        <version>0.7.0</version>
+        <release>5.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://libcbor.org</url>
+        <summary>A CBOR parsing library</summary>
+        <description>libcbor is a C library for parsing and generating CBOR.</description>
+      </application>
+      <application>
+        <name>libcom_err</name>
+        <version>1.46.5</version>
+        <release>2.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://e2fsprogs.sourceforge.net/</url>
+        <summary>Common error description library</summary>
+        <description>This is the common error description library, part of e2fsprogs.
+
+libcom_err is an attempt to present a common error-handling mechanism.</description>
+      </application>
+      <application>
+        <name>libcurl</name>
+        <version>7.83.1</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://curl.se/</url>
+        <summary>A library for getting files from web servers</summary>
+        <description>libcurl is a free and easy-to-use client-side URL transfer library, supporting
+FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, LDAP, LDAPS, FILE, IMAP,
+SMTP, POP3 and RTSP. libcurl supports SSL certificates, HTTP POST, HTTP PUT,
+FTP uploading, HTTP form based upload, proxies, cookies, user+password
+authentication (Basic, Digest, NTLM, Negotiate, Kerberos4), file transfer
+resume, http proxy tunneling and more.</description>
+      </application>
+      <application>
+        <name>libdb</name>
+        <version>5.3.28</version>
+        <release>52.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://www.oracle.com/database/berkeley-db/</url>
+        <summary>The Berkeley DB database library for C</summary>
+        <description>The Berkeley Database (Berkeley DB) is a programmatic toolkit that
+provides embedded database support for both traditional and
+client/server applications. The Berkeley DB includes B+tree, Extended
+Linear Hashing, Fixed and Variable-length record access methods,
+transactions, locking, logging, shared memory caching, and database
+recovery. The Berkeley DB supports C, C++, and Perl APIs. It is
+used by many applications, including Python and Perl, so this should
+be installed on all systems.</description>
+      </application>
+      <application>
+        <name>libeconf</name>
+        <version>0.4.0</version>
+        <release>3.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/openSUSE/libeconf</url>
+        <summary>Enhanced config file parser library</summary>
+        <description>libeconf is a highly flexible and configurable library to parse and manage
+key=value configuration files. It reads configuration file snippets from
+different directories and builds the final configuration file from it.</description>
+      </application>
+      <application>
+        <name>libevent</name>
+        <version>2.1.12</version>
+        <release>6.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://libevent.org/</url>
+        <summary>Abstract asynchronous event notification library</summary>
+        <description>The libevent API provides a mechanism to execute a callback function
+when a specific event occurs on a file descriptor or after a timeout
+has been reached. libevent is meant to replace the asynchronous event
+loop found in event driven network servers. An application just needs
+to call event_dispatch() and can then add or remove events dynamically
+without having to change the event loop.</description>
+      </application>
+      <application>
+        <name>libfdisk</name>
+        <version>2.38</version>
+        <release>3.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://en.wikipedia.org/wiki/Util-linux</url>
+        <summary>Partitioning library for fdisk-like programs</summary>
+        <description>This is library for fdisk-like programs, part of util-linux.</description>
+      </application>
+      <application>
+        <name>libffi</name>
+        <version>3.4.2</version>
+        <release>8.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://sourceware.org/libffi</url>
+        <summary>A portable foreign function interface library</summary>
+        <description>Compilers for high level languages generate code that follow certain
+conventions.  These conventions are necessary, in part, for separate
+compilation to work.  One such convention is the &quot;calling convention&quot;.
+The calling convention is a set of assumptions made by the compiler
+about where function arguments will be found on entry to a function.  A
+calling convention also specifies where the return value for a function
+is found.
+
+Some programs may not know at the time of compilation what arguments
+are to be passed to a function.  For instance, an interpreter may be
+told at run-time about the number and types of arguments used to call a
+given function.  `Libffi' can be used in such programs to provide a
+bridge from the interpreter program to compiled code.
+
+The `libffi' library provides a portable, high level programming
+interface to various calling conventions.  This allows a programmer to
+call any function specified by a call interface description at run time.
+
+FFI stands for Foreign Function Interface.  A foreign function
+interface is the popular name for the interface that allows code
+written in one language to call code written in another language.  The
+`libffi' library really only provides the lowest, machine dependent
+layer of a fully featured foreign function interface.  A layer must
+exist above `libffi' that handles type conversions for values passed
+between the two languages.</description>
+      </application>
+      <application>
+        <name>libfido2</name>
+        <version>1.11.0</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/Yubico/libfido2</url>
+        <summary>FIDO2 library</summary>
+        <description>libfido2 is an open source library to support the FIDO2 protocol.  FIDO2 is
+an open authentication standard that consists of the W3C Web Authentication
+specification (WebAuthn API), and the Client to Authentication Protocol
+(CTAP).  CTAP is an application layer protocol used for communication
+between a client (browser) or a platform (operating system) with an external
+authentication device (for example the Yubico Security Key).</description>
+      </application>
+      <application>
+        <name>libgcc</name>
+        <version>12.1.1</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://gcc.gnu.org</url>
+        <summary>GCC version 12 shared support library</summary>
+        <description>This package contains GCC shared support library which is needed
+e.g. for exception handling support.</description>
+      </application>
+      <application>
+        <name>libgcrypt</name>
+        <version>1.10.1</version>
+        <release>3.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.gnupg.org/</url>
+        <summary>A general-purpose cryptography library</summary>
+        <description>Libgcrypt is a general purpose crypto library based on the code used
+in GNU Privacy Guard.  This is a development version.</description>
+      </application>
+      <application>
+        <name>libgomp</name>
+        <version>12.1.1</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://gcc.gnu.org</url>
+        <summary>GCC OpenMP v4.5 shared support library</summary>
+        <description>This package contains GCC shared support library which is needed
+for OpenMP v4.5 support.</description>
+      </application>
+      <application>
+        <name>libgpg-error</name>
+        <version>1.45</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.gnupg.org/related_software/libgpg-error/</url>
+        <summary>Library for error values used by GnuPG components</summary>
+        <description>This is a library that defines common error values for all GnuPG
+components.  Among these are GPG, GPGSM, GPGME, GPG-Agent, libgcrypt,
+pinentry, SmartCard Daemon and possibly more in the future.</description>
+      </application>
+      <application>
+        <name>libidn2</name>
+        <version>2.3.2</version>
+        <release>4.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://www.gnu.org/software/libidn/#libidn2</url>
+        <summary>Library to support IDNA2008 internationalized domain names</summary>
+        <description>Libidn2 is an implementation of the IDNA2008 specifications in RFC
+5890, 5891, 5892, 5893 and TR46 for internationalized domain names
+(IDN). It is a standalone library, without any dependency on libidn.</description>
+      </application>
+      <application>
+        <name>libkcapi</name>
+        <version>1.3.1</version>
+        <release>4.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://www.chronox.de/libkcapi.html</url>
+        <summary>User space interface to the Linux Kernel Crypto API</summary>
+        <description>libkcapi allows user-space to access the Linux kernel crypto API.
+
+This library uses the netlink interface and exports easy to use APIs
+so that a developer does not need to consider the low-level netlink
+interface handling.
+
+The library does not implement any cipher algorithms.  All consumer
+requests are sent to the kernel for processing.  Results from the
+kernel crypto API are returned to the consumer via the library API.
+
+The kernel interface and therefore this library can be used by
+unprivileged processes.</description>
+      </application>
+      <application>
+        <name>libkcapi-hmaccalc</name>
+        <version>1.3.1</version>
+        <release>4.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://www.chronox.de/libkcapi.html</url>
+        <summary>Drop-in replacements for hmaccalc provided by the libkcapi package</summary>
+        <description>Provides drop-in replacements for sha*hmac tools (from package
+hmaccalc) using libkcapi.</description>
+      </application>
+      <application>
+        <name>libmount</name>
+        <version>2.38</version>
+        <release>3.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://en.wikipedia.org/wiki/Util-linux</url>
+        <summary>Device mounting library</summary>
+        <description>This is the device mounting library, part of util-linux.</description>
+      </application>
+      <application>
+        <name>libnghttp2</name>
+        <version>1.47.0</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://nghttp2.org/</url>
+        <summary>A library implementing the HTTP/2 protocol</summary>
+        <description>libnghttp2 is a library implementing the Hypertext Transfer Protocol
+version 2 (HTTP/2) protocol in C.</description>
+      </application>
+      <application>
+        <name>libnsl2</name>
+        <version>2.0.0</version>
+        <release>3.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/thkukuk/libnsl</url>
+        <summary>Public client interface library for NIS(YP) and NIS+</summary>
+        <description>This package contains the libnsl library. This library contains
+the public client interface for NIS(YP) and NIS+.
+This code was formerly part of glibc, but is now standalone to
+be able to link against TI-RPC for IPv6 support.</description>
+      </application>
+      <application>
+        <name>libpsl</name>
+        <version>0.21.1</version>
+        <release>5.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://rockdaboot.github.io/libpsl</url>
+        <summary>C library for the Publix Suffix List</summary>
+        <description>libpsl is a C library to handle the Public Suffix List. A &quot;public suffix&quot; is a
+domain name under which Internet users can directly register own names.
+
+Browsers and other web clients can use it to
+
+- Avoid privacy-leaking &quot;supercookies&quot;;
+- Avoid privacy-leaking &quot;super domain&quot; certificates;
+- Domain highlighting parts of the domain in a user interface;
+- Sorting domain lists by site;
+
+Libpsl...
+
+- has built-in PSL data for fast access;
+- allows to load PSL data from files;
+- checks if a given domain is a &quot;public suffix&quot;;
+- provides immediate cookie domain verification;
+- finds the longest public part of a given domain;
+- finds the shortest private part of a given domain;
+- works with international domains (UTF-8 and IDNA2008 Punycode);
+- is thread-safe;
+- handles IDNA2008 UTS#46;</description>
+      </application>
+      <application>
+        <name>libpwquality</name>
+        <version>1.4.4</version>
+        <release>7.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/libpwquality/libpwquality/</url>
+        <summary>A library for password generation and password quality checking</summary>
+        <description>This is a library for password quality checks and generation
+of random passwords that pass the checks.
+This library uses the cracklib and cracklib dictionaries
+to perform some of the checks.</description>
+      </application>
+      <application>
+        <name>libseccomp</name>
+        <version>2.5.3</version>
+        <release>2.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/seccomp/libseccomp</url>
+        <summary>Enhanced seccomp library</summary>
+        <description>The libseccomp library provides an easy to use interface to the Linux Kernel's
+syscall filtering mechanism, seccomp.  The libseccomp API allows an application
+to specify which syscalls, and optionally which syscall arguments, the
+application is allowed to execute, all of which are enforced by the Linux
+Kernel.</description>
+      </application>
+      <application>
+        <name>libselinux</name>
+        <version>3.4</version>
+        <release>0.rc3.1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/SELinuxProject/selinux/wiki</url>
+        <summary>SELinux library and simple utilities</summary>
+        <description>Security-enhanced Linux is a feature of the Linux® kernel and a number
+of utilities with enhanced security functionality designed to add
+mandatory access controls to Linux.  The Security-enhanced Linux
+kernel contains new architectural components originally developed to
+improve the security of the Flask operating system. These
+architectural components provide general support for the enforcement
+of many kinds of mandatory access control policies, including those
+based on the concepts of Type Enforcement®, Role-based Access
+Control, and Multi-level Security.
+
+libselinux provides an API for SELinux applications to get and set
+process and file security contexts and to obtain security policy
+decisions.  Required for any applications that use the SELinux API.</description>
+      </application>
+      <application>
+        <name>libsemanage</name>
+        <version>3.4</version>
+        <release>0.rc3.1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/SELinuxProject/selinux/wiki</url>
+        <summary>SELinux binary policy manipulation library</summary>
+        <description>Security-enhanced Linux is a feature of the Linux® kernel and a number
+of utilities with enhanced security functionality designed to add
+mandatory access controls to Linux.  The Security-enhanced Linux
+kernel contains new architectural components originally developed to
+improve the security of the Flask operating system. These
+architectural components provide general support for the enforcement
+of many kinds of mandatory access control policies, including those
+based on the concepts of Type Enforcement®, Role-based Access
+Control, and Multi-level Security.
+
+libsemanage provides an API for the manipulation of SELinux binary policies.
+It is used by checkpolicy (the policy compiler) and similar tools, as well
+as by programs like load_policy that need to perform specific transformations
+on binary policies such as customizing policy boolean settings.</description>
+      </application>
+      <application>
+        <name>libsepol</name>
+        <version>3.4</version>
+        <release>0.rc3.1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/SELinuxProject/selinux/wiki</url>
+        <summary>SELinux binary policy manipulation library</summary>
+        <description>Security-enhanced Linux is a feature of the Linux® kernel and a number
+of utilities with enhanced security functionality designed to add
+mandatory access controls to Linux.  The Security-enhanced Linux
+kernel contains new architectural components originally developed to
+improve the security of the Flask operating system. These
+architectural components provide general support for the enforcement
+of many kinds of mandatory access control policies, including those
+based on the concepts of Type Enforcement®, Role-based Access
+Control, and Multi-level Security.
+
+libsepol provides an API for the manipulation of SELinux binary policies.
+It is used by checkpolicy (the policy compiler) and similar tools, as well
+as by programs like load_policy that need to perform specific transformations
+on binary policies such as customizing policy boolean settings.</description>
+      </application>
+      <application>
+        <name>libsigsegv</name>
+        <version>2.14</version>
+        <release>2.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://www.gnu.org/software/libsigsegv/</url>
+        <summary>Library for handling page faults in user mode</summary>
+        <description>This is a library for handling page faults in user mode. A page fault
+occurs when a program tries to access to a region of memory that is
+currently not available. Catching and handling a page fault is a useful
+technique for implementing:
+  - pageable virtual memory
+  - memory-mapped access to persistent databases
+  - generational garbage collectors
+  - stack overflow handlers
+  - distributed shared memory</description>
+      </application>
+      <application>
+        <name>libsmartcols</name>
+        <version>2.38</version>
+        <release>3.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://en.wikipedia.org/wiki/Util-linux</url>
+        <summary>Formatting library for ls-like programs</summary>
+        <description>This is library for ls-like terminal programs, part of util-linux.</description>
+      </application>
+      <application>
+        <name>libssh</name>
+        <version>0.9.6</version>
+        <release>4.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://www.libssh.org</url>
+        <summary>A library implementing the SSH protocol</summary>
+        <description>The ssh library was designed to be used by programmers needing a working SSH
+implementation by the mean of a library. The complete control of the client is
+made by the programmer. With libssh, you can remotely execute programs, transfer
+files, use a secure and transparent tunnel for your remote programs. With its
+Secure FTP implementation, you can play with remote files easily, without
+third-party programs others than libcrypto (from openssl).</description>
+      </application>
+      <application>
+        <name>libssh-config</name>
+        <version>0.9.6</version>
+        <release>4.fc36</release>
+        <arch>noarch</arch>
+        <url>http://www.libssh.org</url>
+        <summary>Configuration files for libssh</summary>
+        <description>The libssh-config package provides the default configuration files for libssh.</description>
+      </application>
+      <application>
+        <name>libstdc++</name>
+        <version>12.1.1</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://gcc.gnu.org</url>
+        <summary>GNU Standard C++ Library</summary>
+        <description>The libstdc++ package contains a rewritten standard compliant GCC Standard
+C++ Library.</description>
+      </application>
+      <application>
+        <name>libtasn1</name>
+        <version>4.18.0</version>
+        <release>2.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://www.gnu.org/software/libtasn1/</url>
+        <summary>The ASN.1 library used in GNUTLS</summary>
+        <description>A library that provides Abstract Syntax Notation One (ASN.1, as specified
+by the X.680 ITU-T recommendation) parsing and structures management, and
+Distinguished Encoding Rules (DER, as per X.690) encoding and decoding functions.</description>
+      </application>
+      <application>
+        <name>libtirpc</name>
+        <version>1.3.2</version>
+        <release>1.rc1.fc36.1</release>
+        <arch>x86_64</arch>
+        <url>http://git.linux-nfs.org/?p=steved/libtirpc.git;a=summary</url>
+        <summary>Transport Independent RPC Library</summary>
+        <description>This package contains SunLib's implementation of transport-independent
+RPC (TI-RPC) documentation.  This library forms a piece of the base of
+Open Network Computing (ONC), and is derived directly from the
+Solaris 2.3 source.
+
+TI-RPC is an enhanced version of TS-RPC that requires the UNIX System V
+Transport Layer Interface (TLI) or an equivalent X/Open Transport Interface
+(XTI).  TI-RPC is on-the-wire compatible with the TS-RPC, which is supported
+by almost 70 vendors on all major operating systems.  TS-RPC source code
+(RPCSRC 4.0) remains available from several internet sites.</description>
+      </application>
+      <application>
+        <name>libunistring</name>
+        <version>1.0</version>
+        <release>1.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://www.gnu.org/software/libunistring/</url>
+        <summary>GNU Unicode string library</summary>
+        <description>This portable C library implements Unicode string types in three flavours:
+(UTF-8, UTF-16, UTF-32), together with functions for character processing
+(names, classifications, properties) and functions for string processing
+(iteration, formatted output, width, word breaks, line breaks, normalization,
+case folding and regular expressions).</description>
+      </application>
+      <application>
+        <name>libutempter</name>
+        <version>1.2.1</version>
+        <release>6.fc36</release>
+        <arch>x86_64</arch>
+        <url>ftp://ftp.altlinux.org/pub/people/ldv/utempter</url>
+        <summary>A privileged helper for utmp/wtmp updates</summary>
+        <description>This library provides interface for terminal emulators such as
+screen and xterm to record user sessions to utmp and wtmp files.</description>
+      </application>
+      <application>
+        <name>libuuid</name>
+        <version>2.38</version>
+        <release>3.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://en.wikipedia.org/wiki/Util-linux</url>
+        <summary>Universally unique ID library</summary>
+        <description>This is the universally unique ID library, part of util-linux.
+
+The libuuid library generates and parses 128-bit universally unique
+id's (UUID's).  A UUID is an identifier that is unique across both
+space and time, with respect to the space of all UUIDs.  A UUID can
+be used for multiple purposes, from tagging objects with an extremely
+short lifetime, to reliably identifying very persistent objects
+across a network.
+
+See also the &quot;uuid&quot; package, which is a separate implementation.</description>
+      </application>
+      <application>
+        <name>libverto</name>
+        <version>0.3.2</version>
+        <release>3.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/latchset/libverto</url>
+        <summary>Main loop abstraction library</summary>
+        <description>libverto provides a way for libraries to expose asynchronous interfaces
+without having to choose a particular event loop, offloading this
+decision to the end application which consumes the library.
+
+If you are packaging an application, not library, based on libverto,
+you should depend either on a specific implementation module or you
+can depend on the virtual provides 'libverto-module-base'. This will
+ensure that you have at least one module installed that provides io,
+timeout and signal functionality. Currently glib is the only module
+that does not provide these three because it lacks signal. However,
+glib will support signal in the future.</description>
+      </application>
+      <application>
+        <name>libxcrypt</name>
+        <version>4.4.28</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/besser82/libxcrypt</url>
+        <summary>Extended crypt library for descrypt, md5crypt, bcrypt, and others</summary>
+        <description>libxcrypt is a modern library for one-way hashing of passwords.  It
+supports a wide variety of both modern and historical hashing methods:
+yescrypt, gost-yescrypt, scrypt, bcrypt, sha512crypt, sha256crypt,
+md5crypt, SunMD5, sha1crypt, NT, bsdicrypt, bigcrypt, and descrypt.
+It provides the traditional Unix crypt and crypt_r interfaces, as well
+as a set of extended interfaces pioneered by Openwall Linux, crypt_rn,
+crypt_ra, crypt_gensalt, crypt_gensalt_rn, and crypt_gensalt_ra.
+
+libxcrypt is intended to be used by login(1), passwd(1), and other
+similar programs; that is, to hash a small number of passwords during
+an interactive authentication dialogue with a human. It is not suitable
+for use in bulk password-cracking applications, or in any other situation
+where speed is more important than careful handling of sensitive data.
+However, it is intended to be fast and lightweight enough for use in
+servers that must field thousands of login attempts per minute.
+
+This version of the library does not provide the legacy API functions
+that have been provided by glibc's libcrypt.so.1.</description>
+      </application>
+      <application>
+        <name>libxcrypt-compat</name>
+        <version>4.4.28</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/besser82/libxcrypt</url>
+        <summary>Compatibility library providing legacy API functions</summary>
+        <description>This package contains the library providing the compatibility API
+for applications that are linked against glibc's libxcrypt, or that
+are still using the unsafe and deprecated, encrypt, encrypt_r,
+setkey, setkey_r, and fcrypt functions, which are still required by
+recent versions of POSIX, the Single UNIX Specification, and various
+other standards.
+
+All existing binary executables linked against glibc's libcrypt should
+work unmodified with the library supplied by this package.</description>
+      </application>
+      <application>
+        <name>libxkbcommon</name>
+        <version>1.4.1</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://www.x.org</url>
+        <summary>X.Org X11 XKB parsing library</summary>
+        <description>libxkbcommon is the X.Org library for compiling XKB maps into formats usable by
+the X Server or other display servers.</description>
+      </application>
+      <application>
+        <name>libxml2</name>
+        <version>2.9.14</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://xmlsoft.org/</url>
+        <summary>Library providing XML and HTML support</summary>
+        <description>This library allows to manipulate XML files. It includes support
+to read, modify and write XML and HTML files. There is DTDs support
+this includes parsing and validation even with complex DtDs, either
+at parse time or later once the document has been modified. The output
+can be a simple SAX stream or and in-memory DOM like representations.
+In this case one can use the built-in XPath and XPointer implementation
+to select sub nodes or ranges. A flexible Input/Output mechanism is
+available, with existing HTTP and FTP modules and combined to an
+URI library.</description>
+      </application>
+      <application>
+        <name>libzstd</name>
+        <version>1.5.2</version>
+        <release>2.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/facebook/zstd</url>
+        <summary>Zstd shared library</summary>
+        <description>Zstandard compression shared library.</description>
+      </application>
+      <application>
+        <name>linux-firmware</name>
+        <version>20220509</version>
+        <release>133.fc37</release>
+        <arch>noarch</arch>
+        <url>http://www.kernel.org/</url>
+        <summary>Firmware files used by the Linux kernel</summary>
+        <description>This package includes firmware files required for some devices to
+operate.</description>
+      </application>
+      <application>
+        <name>linux-firmware-whence</name>
+        <version>20220509</version>
+        <release>133.fc37</release>
+        <arch>noarch</arch>
+        <url>http://www.kernel.org/</url>
+        <summary>WHENCE License file</summary>
+        <description>This package contains the WHENCE license file which documents the vendor license details.</description>
+      </application>
+      <application>
+        <name>lua-libs</name>
+        <version>5.4.4</version>
+        <release>2.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.lua.org/</url>
+        <summary>Libraries for lua</summary>
+        <description>This package contains the shared libraries for lua.</description>
+      </application>
+      <application>
+        <name>lz4-libs</name>
+        <version>1.9.3</version>
+        <release>4.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://lz4.github.io/lz4/</url>
+        <summary>Libaries for lz4</summary>
+        <description>This package contains the libaries for lz4.</description>
+      </application>
+      <application>
+        <name>memstrack</name>
+        <version>0.2.4</version>
+        <release>2.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/ryncsn/memstrack</url>
+        <summary>A memory allocation tracer, like a hot spot analyzer for memory allocation</summary>
+        <description>A memory allocation tracer, like a hot spot analyzer for memory allocation</description>
+      </application>
+      <application>
+        <name>mkpasswd</name>
+        <version>5.5.13</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://www.linux.it/~md/software/</url>
+        <summary>Encrypt a password with crypt(3) function using a salt</summary>
+        <description>mkpasswd tool encrypts a given password with the crypt(3) libc function
+using a given salt.</description>
+      </application>
+      <application>
+        <name>mpdecimal</name>
+        <version>2.5.1</version>
+        <release>3.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://www.bytereef.org/mpdecimal/index.html</url>
+        <summary>Library for general decimal arithmetic</summary>
+        <description>The package contains a library limpdec implementing General Decimal Arithmetic
+Specification. The specification, written by Mike Cowlishaw from IBM, defines
+a general purpose arbitrary precision data type together with rigorously
+specified functions and rounding behavior.</description>
+      </application>
+      <application>
+        <name>mpfr</name>
+        <version>4.1.0</version>
+        <release>9.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://www.mpfr.org/</url>
+        <summary>C library for multiple-precision floating-point computations</summary>
+        <description>The MPFR library is a C library for multiple-precision floating-point
+computations with &quot;correct rounding&quot;. The MPFR is efficient and
+also has a well-defined semantics. It copies the good ideas from the
+ANSI/IEEE-754 standard for double-precision floating-point arithmetic
+(53-bit mantissa). MPFR is based on the GMP multiple-precision library.</description>
+      </application>
+      <application>
+        <name>ncurses-base</name>
+        <version>6.3</version>
+        <release>2.20220501.fc37</release>
+        <arch>noarch</arch>
+        <url>https://invisible-island.net/ncurses/ncurses.html</url>
+        <summary>Descriptions of common terminals</summary>
+        <description>This package contains descriptions of common terminals. Other terminal
+descriptions are included in the ncurses-term package.</description>
+      </application>
+      <application>
+        <name>ncurses-libs</name>
+        <version>6.3</version>
+        <release>2.20220501.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://invisible-island.net/ncurses/ncurses.html</url>
+        <summary>Ncurses libraries</summary>
+        <description>The curses library routines are a terminal-independent method of
+updating character screens with reasonable optimization.  The ncurses
+(new curses) library is a freely distributable replacement for the
+discontinued 4.4 BSD classic curses library.
+
+This package contains the ncurses libraries.</description>
+      </application>
+      <application>
+        <name>openldap</name>
+        <version>2.6.2</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://www.openldap.org/</url>
+        <summary>LDAP support libraries</summary>
+        <description>OpenLDAP is an open source suite of LDAP (Lightweight Directory Access
+Protocol) applications and development tools. LDAP is a set of
+protocols for accessing directory services (usually phone book style
+information, but other information is possible) over the Internet,
+similar to the way DNS (Domain Name System) information is propagated
+over the Internet. The openldap package contains configuration files,
+libraries, and documentation for OpenLDAP.</description>
+      </application>
+      <application>
+        <name>openssl-libs</name>
+        <epoch>1</epoch>
+        <version>3.0.2</version>
+        <release>4.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://www.openssl.org/</url>
+        <summary>A general purpose cryptography library with TLS implementation</summary>
+        <description>OpenSSL is a toolkit for supporting cryptography. The openssl-libs
+package contains the libraries that are used by various applications which
+support cryptographic algorithms and protocols.</description>
+      </application>
+      <application>
+        <name>openssl-pkcs11</name>
+        <version>0.4.11</version>
+        <release>8.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/OpenSC/libp11</url>
+        <summary>A PKCS#11 engine for use with OpenSSL</summary>
+        <description>openssl-pkcs11 enables hardware security module (HSM), and smart card support in
+OpenSSL applications. More precisely, it is an OpenSSL engine which makes
+registered PKCS#11 modules available for OpenSSL applications. The engine is
+optional and can be loaded by configuration file, command line or through the
+OpenSSL ENGINE API.</description>
+      </application>
+      <application>
+        <name>os-prober</name>
+        <version>1.77</version>
+        <release>9.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://kitenet.net/~joey/code/os-prober/</url>
+        <summary>Probes disks on the system for installed operating systems</summary>
+        <description>This package detects other OSes available on a system and outputs the results
+in a generic machine-readable format. Support for new OSes and Linux
+distributions can be added easily.</description>
+      </application>
+      <application>
+        <name>p11-kit</name>
+        <version>0.24.1</version>
+        <release>2.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://p11-glue.freedesktop.org/p11-kit.html</url>
+        <summary>Library for loading and sharing PKCS#11 modules</summary>
+        <description>p11-kit provides a way to load and enumerate PKCS#11 modules, as well
+as a standard configuration setup for installing PKCS#11 modules in
+such a way that they're discoverable.</description>
+      </application>
+      <application>
+        <name>p11-kit-trust</name>
+        <version>0.24.1</version>
+        <release>2.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://p11-glue.freedesktop.org/p11-kit.html</url>
+        <summary>System trust module from p11-kit</summary>
+        <description>The p11-kit-trust package contains a system trust PKCS#11 module which
+contains certificate anchors and black lists.</description>
+      </application>
+      <application>
+        <name>pam</name>
+        <version>1.5.2</version>
+        <release>12.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://www.linux-pam.org/</url>
+        <summary>An extensible library which provides authentication for applications</summary>
+        <description>PAM (Pluggable Authentication Modules) is a system security tool that
+allows system administrators to set authentication policy without
+having to recompile programs that handle authentication.</description>
+      </application>
+      <application>
+        <name>pam-libs</name>
+        <version>1.5.2</version>
+        <release>12.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://www.linux-pam.org/</url>
+        <summary>Shared libraries of the PAM package</summary>
+        <description>PAM (Pluggable Authentication Modules) is a system security tool that
+allows system administrators to set authentication policy without
+having to recompile programs that handle authentication. The pam-libs
+contains the shared libraries for PAM.</description>
+      </application>
+      <application>
+        <name>pcre</name>
+        <version>8.45</version>
+        <release>1.fc36.1</release>
+        <arch>x86_64</arch>
+        <url>https://www.pcre.org/</url>
+        <summary>Perl-compatible regular expression library</summary>
+        <description>PCRE, Perl-compatible regular expression, library has its own native API, but
+a set of wrapper functions that are based on the POSIX API are also supplied
+in the libpcreposix library. Note that this just provides a POSIX calling
+interface to PCRE: the regular expressions themselves still follow Perl syntax
+and semantics. This package provides support for strings in 8-bit and UTF-8
+encodings. Detailed change log is provided by pcre-doc package.</description>
+      </application>
+      <application>
+        <name>pcre2</name>
+        <version>10.40</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.pcre.org/</url>
+        <summary>Perl-compatible regular expression library</summary>
+        <description>PCRE2 is a re-working of the original PCRE (Perl-compatible regular
+expression) library to provide an entirely new API.
+
+PCRE2 is written in C, and it has its own API. There are three sets of
+functions, one for the 8-bit library, which processes strings of bytes, one
+for the 16-bit library, which processes strings of 16-bit values, and one for
+the 32-bit library, which processes strings of 32-bit values. There are no C++
+wrappers. This package provides support for strings in 8-bit and UTF-8
+encodings. Install pcre2-utf16 or pcre2-utf32 packages for the other ones.
+
+The distribution does contain a set of C wrapper functions for the 8-bit
+library that are based on the POSIX regular expression API (see the pcre2posix
+man page). These can be found in a library called libpcre2posix. Note that
+this just provides a POSIX calling interface to PCRE2; the regular expressions
+themselves still follow Perl syntax and semantics. The POSIX API is
+restricted, and does not give full access to all of PCRE2's facilities.</description>
+      </application>
+      <application>
+        <name>pcre2-syntax</name>
+        <version>10.40</version>
+        <release>1.fc37</release>
+        <arch>noarch</arch>
+        <url>https://www.pcre.org/</url>
+        <summary>Documentation for PCRE2 regular expressions</summary>
+        <description>This is a set of manual pages that document a syntax of the regular
+expressions implemented by the PCRE2 library.</description>
+      </application>
+      <application>
+        <name>pigz</name>
+        <version>2.7</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.zlib.net/pigz/</url>
+        <summary>Parallel implementation of gzip</summary>
+        <description>pigz, which stands for parallel implementation of gzip,
+is a fully functional replacement for gzip that exploits
+multiple processors and multiple cores to the hilt when
+compressing data.</description>
+      </application>
+      <application>
+        <name>popt</name>
+        <version>1.18</version>
+        <release>7.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/rpm-software-management/popt/</url>
+        <summary>C library for parsing command line parameters</summary>
+        <description>Popt is a C library for parsing command line parameters. Popt was
+heavily influenced by the getopt() and getopt_long() functions, but
+it improves on them by allowing more powerful argument expansion.
+Popt can parse arbitrary argv[] style arrays and automatically set
+variables based on command line arguments. Popt allows command line
+arguments to be aliased via configuration files and includes utility
+functions for parsing arbitrary strings into argv[] arrays using
+shell-like rules.</description>
+      </application>
+      <application>
+        <name>procps-ng</name>
+        <version>3.3.17</version>
+        <release>5.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://sourceforge.net/projects/procps-ng/</url>
+        <summary>System and process monitoring utilities</summary>
+        <description>The procps package contains a set of system utilities that provide
+system information. Procps includes ps, free, skill, pkill, pgrep,
+snice, tload, top, uptime, vmstat, pidof, pmap, slabtop, w, watch,
+pwdx and pidwait.
+The ps command displays a snapshot of running processes. The top command
+provides a repetitive update of the statuses of running processes.
+The free command displays the amounts of free and used memory on your
+system. The skill command sends a terminate command (or another
+specified signal) to a specified set of processes. The snice
+command is used to change the scheduling priority of specified
+processes. The tload command prints a graph of the current system
+load average to a specified tty. The uptime command displays the
+current time, how long the system has been running, how many users
+are logged on, and system load averages for the past one, five,
+and fifteen minutes. The w command displays a list of the users
+who are currently logged on and what they are running. The watch
+program watches a running program. The vmstat command displays
+virtual memory statistics about processes, memory, paging, block
+I/O, traps, and CPU activity. The pwdx command reports the current
+working directory of a process or processes. The pidwait command
+waits for processes of specified names.</description>
+      </application>
+      <application>
+        <name>publicsuffix-list-dafsa</name>
+        <version>20210518</version>
+        <release>4.fc36</release>
+        <arch>noarch</arch>
+        <url>https://publicsuffix.org/</url>
+        <summary>Cross-vendor public domain suffix database in DAFSA form</summary>
+        <description>The Public Suffix List is a cross-vendor initiative to provide
+an accurate list of domain name suffixes, maintained by the hard work
+of Mozilla volunteers and by submissions from registries.
+Software using the Public Suffix List will be able to determine where
+cookies may and may not be set, protecting the user from being
+tracked across sites.
+
+This package includes a DAFSA representation of the Public Suffix List
+for runtime loading.</description>
+      </application>
+      <application>
+        <name>python-pip-wheel</name>
+        <version>22.0.4</version>
+        <release>2.fc37</release>
+        <arch>noarch</arch>
+        <url>https://pip.pypa.io/</url>
+        <summary>The pip wheel</summary>
+        <description>A Python wheel of pip to use with venv.</description>
+      </application>
+      <application>
+        <name>python-setuptools-wheel</name>
+        <version>60.9.3</version>
+        <release>2.fc37</release>
+        <arch>noarch</arch>
+        <url>https://pypi.python.org/pypi/setuptools</url>
+        <summary>The setuptools wheel</summary>
+        <description>A Python wheel of setuptools to use with venv.</description>
+      </application>
+      <application>
+        <name>python-unversioned-command</name>
+        <version>3.10.4</version>
+        <release>1.fc37</release>
+        <arch>noarch</arch>
+        <url>https://www.python.org/</url>
+        <summary>The &quot;python&quot; command that runs Python 3</summary>
+        <description>This package contains /usr/bin/python - the &quot;python&quot; command that runs Python 3.</description>
+      </application>
+      <application>
+        <name>python3</name>
+        <version>3.10.4</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.python.org/</url>
+        <summary>Python 3.10 interpreter</summary>
+        <description>Python 3.10 is an accessible, high-level, dynamically typed, interpreted
+programming language, designed with an emphasis on code readability.
+It includes an extensive standard library, and has a vast ecosystem of
+third-party libraries.
+
+The python3 package provides the &quot;python3&quot; executable: the reference
+interpreter for the Python language, version 3.
+The majority of its standard library is provided in the python3-libs package,
+which should be installed automatically along with python3.
+The remaining parts of the Python standard library are broken out into the
+python3-tkinter and python3-test packages, which may need to be installed
+separately.
+
+Documentation for Python is provided in the python3-docs package.
+
+Packages containing additional libraries for Python are generally named with
+the &quot;python3-&quot; prefix.</description>
+      </application>
+      <application>
+        <name>python3-libs</name>
+        <version>3.10.4</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.python.org/</url>
+        <summary>Python runtime libraries</summary>
+        <description>This package contains runtime libraries for use by Python:
+- the majority of the Python standard library
+- a dynamically linked library for use by applications that embed Python as
+  a scripting language, and by the main &quot;python3&quot; executable</description>
+      </application>
+      <application>
+        <name>qrencode-libs</name>
+        <version>4.1.1</version>
+        <release>2.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://fukuchi.org/works/qrencode/</url>
+        <summary>QR Code encoding library - Shared libraries</summary>
+        <description>The qrencode-libs package contains the shared libraries and header files for
+applications that use qrencode.</description>
+      </application>
+      <application>
+        <name>readline</name>
+        <version>8.1</version>
+        <release>6.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://tiswww.case.edu/php/chet/readline/rltop.html</url>
+        <summary>A library for editing typed command lines</summary>
+        <description>The Readline library provides a set of functions that allow users to
+edit command lines. Both Emacs and vi editing modes are available. The
+Readline library includes additional functions for maintaining a list
+of previously-entered command lines for recalling or editing those
+lines, and for performing csh-like history expansion on previous
+commands.</description>
+      </application>
+      <application>
+        <name>rpm</name>
+        <version>4.18.0</version>
+        <release>0.alpha2.1.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://www.rpm.org/</url>
+        <summary>The RPM package management system</summary>
+        <description>The RPM Package Manager (RPM) is a powerful command line driven
+package management system capable of installing, uninstalling,
+verifying, querying, and updating software packages. Each software
+package consists of an archive of files along with information about
+the package like its version, a description, etc.</description>
+      </application>
+      <application>
+        <name>rpm-libs</name>
+        <version>4.18.0</version>
+        <release>0.alpha2.1.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://www.rpm.org/</url>
+        <summary>Libraries for manipulating RPM packages</summary>
+        <description>This package contains the RPM shared libraries.</description>
+      </application>
+      <application>
+        <name>sed</name>
+        <version>4.8</version>
+        <release>10.fc36</release>
+        <arch>x86_64</arch>
+        <url>http://sed.sourceforge.net/</url>
+        <summary>A GNU stream text editor</summary>
+        <description>The sed (Stream EDitor) editor is a stream or batch (non-interactive)
+editor.  Sed takes text as input, performs an operation or set of
+operations on the text and outputs the modified text.  The operations
+that sed performs (substitutions, deletions, insertions, etc.) can be
+specified in a script file or from the command line.</description>
+      </application>
+      <application>
+        <name>setup</name>
+        <version>2.13.10</version>
+        <release>1.fc37</release>
+        <arch>noarch</arch>
+        <url>https://pagure.io/setup/</url>
+        <summary>A set of system configuration and setup files</summary>
+        <description>The setup package contains a set of important system configuration and
+setup files, such as passwd, group, and profile.</description>
+      </application>
+      <application>
+        <name>shadow-utils</name>
+        <epoch>2</epoch>
+        <version>4.11.1</version>
+        <release>2.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/shadow-maint/shadow</url>
+        <summary>Utilities for managing accounts and shadow password files</summary>
+        <description>The shadow-utils package includes the necessary programs for
+converting UNIX password files to the shadow password format, plus
+programs for managing user and group accounts. The pwconv command
+converts passwords to the shadow password format. The pwunconv command
+unconverts shadow passwords and generates a passwd file (a standard
+UNIX password file). The pwck command checks the integrity of password
+and shadow files. The lastlog command prints out the last login times
+for all users. The useradd, userdel, and usermod commands are used for
+managing user accounts. The groupadd, groupdel, and groupmod commands
+are used for managing group accounts.</description>
+      </application>
+      <application>
+        <name>sqlite-libs</name>
+        <version>3.38.5</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>http://www.sqlite.org/</url>
+        <summary>Shared library for the sqlite3 embeddable SQL database engine.</summary>
+        <description>This package contains the shared library for sqlite.</description>
+      </application>
+      <application>
+        <name>systemd</name>
+        <version>251.1</version>
+        <release>2.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.freedesktop.org/wiki/Software/systemd</url>
+        <summary>System and Service Manager</summary>
+        <description>systemd is a system and service manager that runs as PID 1 and starts the rest
+of the system. It provides aggressive parallelization capabilities, uses socket
+and D-Bus activation for starting services, offers on-demand starting of
+daemons, keeps track of processes using Linux control groups, maintains mount
+and automount points, and implements an elaborate transactional dependency-based
+service control logic. systemd supports SysV and LSB init scripts and works as a
+replacement for sysvinit. Other parts of this package are a logging daemon,
+utilities to control basic system configuration like the hostname, date, locale,
+maintain a list of logged-in users, system accounts, runtime directories and
+settings, and a logging daemons.
+
+This package was built from the 251.1-stable branch of systemd.</description>
+      </application>
+      <application>
+        <name>systemd-libs</name>
+        <version>251.1</version>
+        <release>2.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.freedesktop.org/wiki/Software/systemd</url>
+        <summary>systemd libraries</summary>
+        <description>Libraries for systemd and udev.</description>
+      </application>
+      <application>
+        <name>systemd-networkd</name>
+        <version>251.1</version>
+        <release>2.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.freedesktop.org/wiki/Software/systemd</url>
+        <summary>System daemon that manages network configurations</summary>
+        <description>systemd-networkd is a system service that manages networks. It detects and
+configures network devices as they appear, as well as creating virtual network
+devices.</description>
+      </application>
+      <application>
+        <name>systemd-pam</name>
+        <version>251.1</version>
+        <release>2.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.freedesktop.org/wiki/Software/systemd</url>
+        <summary>systemd PAM module</summary>
+        <description>Systemd PAM module registers the session with systemd-logind.</description>
+      </application>
+      <application>
+        <name>systemd-resolved</name>
+        <version>251.1</version>
+        <release>2.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.freedesktop.org/wiki/Software/systemd</url>
+        <summary>Network Name Resolution manager</summary>
+        <description>systemd-resolved is a system service that provides network name resolution to
+local applications. It implements a caching and validating DNS/DNSSEC stub
+resolver, as well as an LLMNR and MulticastDNS resolver and responder.</description>
+      </application>
+      <application>
+        <name>systemd-udev</name>
+        <version>251.1</version>
+        <release>2.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://www.freedesktop.org/wiki/Software/systemd</url>
+        <summary>Rule-based device node and kernel event manager</summary>
+        <description>This package contains systemd-udev and the rules and hardware database needed to
+manage device nodes. This package is necessary on physical machines and in
+virtual machines, but not in containers.
+
+This package also provides systemd-timesyncd, a network time protocol daemon.
+
+It also contains tools to manage encrypted home areas and secrets bound to the
+machine, and to create or grow partitions and make file systems automatically.</description>
+      </application>
+      <application>
+        <name>tpm2-tss</name>
+        <version>3.2.0</version>
+        <release>1.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://github.com/tpm2-software/tpm2-tss</url>
+        <summary>TPM2.0 Software Stack</summary>
+        <description>tpm2-tss is a software stack supporting Trusted Platform Module(TPM) 2.0 system
+APIs. It sits between TPM driver and applications, providing TPM2.0 specified
+APIs for applications to access TPM module through kernel TPM drivers.</description>
+      </application>
+      <application>
+        <name>tzdata</name>
+        <version>2022a</version>
+        <release>1.fc37</release>
+        <arch>noarch</arch>
+        <url>https://www.iana.org/time-zones</url>
+        <summary>Timezone data</summary>
+        <description>This package contains data files with rules for various timezones around
+the world.</description>
+      </application>
+      <application>
+        <name>util-linux</name>
+        <version>2.38</version>
+        <release>3.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://en.wikipedia.org/wiki/Util-linux</url>
+        <summary>Collection of basic system utilities</summary>
+        <description>The util-linux package contains a large variety of low-level system
+utilities that are necessary for a Linux system to function. Among
+others, util-linux contains the fdisk configuration tool and the login
+program.</description>
+      </application>
+      <application>
+        <name>util-linux-core</name>
+        <version>2.38</version>
+        <release>3.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://en.wikipedia.org/wiki/Util-linux</url>
+        <summary>The most essential utilities from the util-linux suite</summary>
+        <description>This is a very basic set of Linux utilities that is necessary on
+minimal installations.</description>
+      </application>
+      <application>
+        <name>whois-nls</name>
+        <version>5.5.13</version>
+        <release>1.fc37</release>
+        <arch>noarch</arch>
+        <url>http://www.linux.it/~md/software/</url>
+        <summary>Gettext catalogs for whois tools</summary>
+        <description>whois tools messages translated into different natural languages.</description>
+      </application>
+      <application>
+        <name>xkeyboard-config</name>
+        <version>2.35.1</version>
+        <release>1.fc37</release>
+        <arch>noarch</arch>
+        <url>http://www.freedesktop.org/wiki/Software/XKeyboardConfig</url>
+        <summary>X Keyboard Extension configuration data</summary>
+        <description>This package contains configuration data used by the X Keyboard Extension (XKB),
+which allows selection of keyboard layouts when using a graphical interface.</description>
+      </application>
+      <application>
+        <name>xz</name>
+        <version>5.2.5</version>
+        <release>9.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://tukaani.org/xz/</url>
+        <summary>LZMA compression utilities</summary>
+        <description>XZ Utils are an attempt to make LZMA compression easy to use on free (as in
+freedom) operating systems. This is achieved by providing tools and libraries
+which are similar to use than the equivalents of the most popular existing
+compression algorithms.
+
+LZMA is a general purpose compression algorithm designed by Igor Pavlov as
+part of 7-Zip. It provides high compression ratio while keeping the
+decompression speed fast.</description>
+      </application>
+      <application>
+        <name>xz-libs</name>
+        <version>5.2.5</version>
+        <release>9.fc37</release>
+        <arch>x86_64</arch>
+        <url>https://tukaani.org/xz/</url>
+        <summary>Libraries for decoding LZMA compression</summary>
+        <description>Libraries for decoding files compressed with LZMA or XZ utils.</description>
+      </application>
+      <application>
+        <name>zlib</name>
+        <version>1.2.11</version>
+        <release>31.fc36</release>
+        <arch>x86_64</arch>
+        <url>https://www.zlib.net/</url>
+        <summary>Compression and decompression library</summary>
+        <description>Zlib is a general-purpose, patent-free, lossless data compression
+library which is used by many different programs.</description>
       </application>
     </applications>
   </operatingsystem>
index 25ee40f3f7b058d959f644129cff43dbfaacae61..73357c7d7e69c75a18b3767a3c689fdf34b5c17d 100644 (file)
@@ -1,5 +1,5 @@
 /* virt-inspector
- * Copyright (C) 2010-2012 Red Hat Inc.
+ * Copyright (C) 2010-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -294,6 +294,9 @@ main (int argc, char *argv[])
    */
   add_drives (drvs);
 
+  if (key_store_requires_network (ks) && guestfs_set_network (g, 1) == -1)
+    exit (EXIT_FAILURE);
+
   if (guestfs_launch (g) == -1)
     exit (EXIT_FAILURE);
 
@@ -444,6 +447,14 @@ output_root (xmlTextWriterPtr xo, char *root)
       single_element ("hostname", str);
     free (str);
 
+#ifdef GUESTFS_HAVE_INSPECT_GET_BUILD_ID
+    str = guestfs_inspect_get_build_id (g, root);
+    if (!str) exit (EXIT_FAILURE);
+    if (STRNEQ (str, "unknown"))
+      single_element ("build_id", str);
+    free (str);
+#endif
+
     str = guestfs_inspect_get_osinfo (g, root);
     if (!str) exit (EXIT_FAILURE);
     if (STRNEQ (str, "unknown"))
index 334cef4dc28cf9e35963e9d4032b6fd539894588..b9989433da854e97796189611e8b363e51cae2e2 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/bash -
 # libguestfs virt-inspector test script
-# Copyright (C) 2012-2020 Red Hat Inc.
+# Copyright (C) 2012-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index 955ac631694624af5bf4c444343659e29dfda1a7..32f540e0f207fd73d2c4ded6fdf1f8f27f16351c 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/bash -
 # libguestfs virt-inspector test script
-# Copyright (C) 2012-2020 Red Hat Inc.
+# Copyright (C) 2012-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index f9ec7df1c1fc9fd594e9e66974a8f496d19b0329..ef8f6cd3a6eb357f3b179f39feb9356e7e98e07e 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/bash -
 # libguestfs virt-inspector test script
-# Copyright (C) 2012-2020 Red Hat Inc.
+# Copyright (C) 2012-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index 0d732c9c905bb29353eb00831db7372a01d5805e..d31a2a008d068c51fe134e3cecd1f376e0ad8e38 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/bash -
 # @configure_input@
-# Copyright (C) 2012-2020 Red Hat Inc.
+# Copyright (C) 2012-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index d5261e8b54cb59c053f12b7fea217286714b65b6..f6f43cb43401e493ee1038c2d56ad990b3e8abb9 100644 (file)
@@ -49,6 +49,9 @@ L<guestfs(3)/INSPECTION>).  The same information can also be fetched
 using guestfish or via libguestfs bindings in many programming
 languages (see L</GETTING INSPECTION DATA FROM THE LIBGUESTFS API>).
 
+Additional information about bootloader, kernel and drivers inside a
+guest can be found using L<virt-drivers(1)>.
+
 =head1 OPTIONS
 
 =over 4
@@ -495,6 +498,7 @@ L<guestfish(1)>,
 L<http://www.w3.org/TR/xpath/>,
 L<base64(1)>,
 L<xmlstarlet(1)>,
+L<virt-drivers(1)>,
 L<http://libguestfs.org/>.
 
 =head1 AUTHORS
@@ -513,4 +517,4 @@ Matthew Booth L<mbooth@redhat.com>
 
 =head1 COPYRIGHT
 
-Copyright (C) 2010-2012 Red Hat Inc.
+Copyright (C) 2010-2023 Red Hat Inc.
index 5b460b364593080165e135abdb11c1a4d92fbd3d..29c5798e19221af33daad3b01edb8b28a93daca0 100644 (file)
@@ -38,6 +38,7 @@
             <optional><ref name="ospackageformat"/></optional>
             <optional><ref name="ospackagemanagement"/></optional>
             <optional><element name="hostname"><text/></element></optional>
+            <optional><element name="build_id"><text/></element></optional>
             <optional><element name="osinfo"><text/></element></optional>
 
             <ref name="mountpoints"/>
index 090d05c869790e7f687e6f7a4b5d088919e6e85d..d4ae035434662ddb259f3857abbce80a9a884392 100644 (file)
@@ -1,5 +1,5 @@
 /* libguestfs
- * Copyright (C) 2013-2020 Red Hat Inc.
+ * Copyright (C) 2013-2023 Red Hat Inc.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
index a53188deb99768ff034a8ad2af7f0a67d1d6c938..4a9c2ee031b39e26972a8a01507d543739c4c8c3 100644 (file)
@@ -1,5 +1,5 @@
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index fb773409280e2c0af6e19abab50a9345efe1283e..bc7e3b2aae9535159bffb081d7a20753e192d8b9 100644 (file)
@@ -1,5 +1,5 @@
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index fcc9c3958e175d59855d782690fc1581f67c16d1..2d252bf9e6b148c3e6dd6e0bac26d7e307d86907 100644 (file)
@@ -1,5 +1,5 @@
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 dnl Any C libraries required by the libguestfs C library (not the daemon).
 
 dnl Of course we need libguestfs.
-PKG_CHECK_MODULES([LIBGUESTFS], [libguestfs >= 1.44])
+dnl
+dnl We need libguestfs 1.49.8 for guestfs_inspect_get_build_id in
+dnl virt-drivers.
+PKG_CHECK_MODULES([LIBGUESTFS], [libguestfs >= 1.49.8])
+
+dnl Test if it's GNU or XSI strerror_r.
+AC_FUNC_STRERROR_R
 
 dnl Define a C symbol for the host CPU architecture.
 AC_DEFINE_UNQUOTED([host_cpu],["$host_cpu"],[Host architecture.])
@@ -27,13 +33,14 @@ dnl Headers.
 AC_CHECK_HEADERS([\
     byteswap.h \
     endian.h \
-    sys/endian.h \
+    error.h \
     errno.h \
     linux/fs.h \
     linux/magic.h \
     linux/raid/md_u.h \
     linux/rtc.h \
     printf.h \
+    sys/endian.h \
     sys/inotify.h \
     sys/mount.h \
     sys/resource.h \
@@ -51,8 +58,10 @@ AC_CHECK_HEADERS([\
 dnl Functions.
 AC_CHECK_FUNCS([\
     be32toh \
+    error \
     fsync \
     futimens \
+    getprogname \
     getxattr \
     htonl \
     htons \
@@ -157,3 +166,6 @@ LIBS="$old_LIBS"
 
 dnl Check for Jansson JSON library (required).
 PKG_CHECK_MODULES([JANSSON], [jansson >= 2.7])
+
+dnl Check for libosinfo (mandatory)
+PKG_CHECK_MODULES([LIBOSINFO], [libosinfo-1.0])
index c1226545cb7efd609387c7d8d7644d9895a13a7b..f723646088ed15de3b09d79e7bcdfe80a6a2fbbc 100644 (file)
@@ -1,5 +1,5 @@
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index ad1ca0d524f7a235d0e029e211f0b340b49d0c44..bb044e709d7632a551c0c2c027a560aa1bebd8a4 100644 (file)
@@ -1,5 +1,5 @@
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index 8791ac69df41a33a6a9aa0386ec21c4c5095cbbc..d2bf40049dd43c39a8d6a6ca6ead30090877ac66 100644 (file)
@@ -1,5 +1,5 @@
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index c8337ed9b58680f408e8db441d15e06187c0fcbc..9361a328fd8df1768fbfb3066e368164b8aeb9fe 100644 (file)
@@ -1,5 +1,5 @@
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index 74467d2cd03afcd4086e2829780817b4129a0ee1..dc78cca7712de78402d8caa210a57180f52fb576 100644 (file)
@@ -1,5 +1,5 @@
 # libguestfs
-# Copyright (C) 2009-2021 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -39,6 +39,11 @@ AC_PROG_AWK
 
 AC_PROG_LN_S
 
+dnl Check for realpath (used by ocaml-dep.sh for basic builds).
+AC_CHECK_PROGS([REALPATH],[grealpath realpath],[no])
+test "x$REALPATH" = "xno" &&
+    AC_MSG_ERROR([GNU realpath program must be installed])
+
 dnl Check for xorriso/genisoimage/mkisofs.
 AC_PATH_PROGS([MKISOFS],[xorrisofs genisoimage mkisofs],[no],
     [$PATH$PATH_SEPARATOR/usr/sbin$PATH_SEPARATOR/sbin])
index e3adedad630a0376ce06dcc87eaff73a680c65ca..a644432f431895cff03337b765a7389c7fd0c221 100644 (file)
@@ -1,7 +1,6 @@
 # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
 #
-#   Copyright (C) 1996-2001, 2003-2019, 2021-2022 Free Software
-#   Foundation, Inc.
+#   Copyright (C) 1996-2001, 2003-2015 Free Software Foundation, Inc.
 #   Written by Gordon Matzigkeit, 1996
 #
 # This file is free software; the Free Software Foundation gives
@@ -32,7 +31,7 @@ m4_define([_LT_COPYING], [dnl
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 ])
 
-# serial 59 LT_INIT
+# serial 58 LT_INIT
 
 
 # LT_PREREQ(VERSION)
@@ -182,7 +181,6 @@ m4_require([_LT_FILEUTILS_DEFAULTS])dnl
 m4_require([_LT_CHECK_SHELL_FEATURES])dnl
 m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl
 m4_require([_LT_CMD_RELOAD])dnl
-m4_require([_LT_DECL_FILECMD])dnl
 m4_require([_LT_CHECK_MAGIC_METHOD])dnl
 m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl
 m4_require([_LT_CMD_OLD_ARCHIVE])dnl
@@ -221,8 +219,8 @@ esac
 ofile=libtool
 can_build_shared=yes
 
-# All known linkers require a '.a' archive for static linking (except MSVC and
-# ICC, which need '.lib').
+# All known linkers require a '.a' archive for static linking (except MSVC,
+# which needs '.lib').
 libext=a
 
 with_gnu_ld=$lt_cv_prog_gnu_ld
@@ -780,7 +778,7 @@ _LT_EOF
   # if finds mixed CR/LF and LF-only lines.  Since sed operates in
   # text mode, it properly converts lines to CR/LF.  This bash problem
   # is reportedly fixed, but why not run on old versions too?
-  $SED '$q' "$ltmain" >> "$cfgfile" \
+  sed '$q' "$ltmain" >> "$cfgfile" \
      || (rm -f "$cfgfile"; exit 1)
 
    mv -f "$cfgfile" "$ofile" ||
@@ -1044,8 +1042,8 @@ int forced_loaded() { return 2;}
 _LT_EOF
       echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD
       $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD
-      echo "$AR $AR_FLAGS libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD
-      $AR $AR_FLAGS libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD
+      echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD
+      $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD
       echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD
       $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD
       cat > conftest.c << _LT_EOF
@@ -1069,12 +1067,17 @@ _LT_EOF
       _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;;
     darwin1.*)
       _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
-    darwin*)
-      case $MACOSX_DEPLOYMENT_TARGET,$host in
-        10.[[012]],*|,*powerpc*-darwin[[5-8]]*)
-          _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
-        *)
-          _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
+    darwin*) # darwin 5.x on
+      # if running on 10.5 or later, the deployment target defaults
+      # to the OS version, if on x86, and 10.4, the deployment
+      # target defaults to 10.4. Don't you love it?
+      case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
+       10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
+         _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
+       10.[[012]][[,.]]*)
+         _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
+       10.*)
+         _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
       esac
     ;;
   esac
@@ -1123,12 +1126,12 @@ m4_defun([_LT_DARWIN_LINKER_FEATURES],
     output_verbose_link_cmd=func_echo_all
     _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil"
     _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil"
-    _LT_TAGVAR(archive_expsym_cmds, $1)="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
-    _LT_TAGVAR(module_expsym_cmds, $1)="$SED -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
+    _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
+    _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
     m4_if([$1], [CXX],
 [   if test yes != "$lt_cv_apple_cc_single_mod"; then
       _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil"
-      _LT_TAGVAR(archive_expsym_cmds, $1)="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil"
+      _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil"
     fi
 ],[])
   else
@@ -1242,8 +1245,7 @@ _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes])
 # _LT_WITH_SYSROOT
 # ----------------
 AC_DEFUN([_LT_WITH_SYSROOT],
-[m4_require([_LT_DECL_SED])dnl
-AC_MSG_CHECKING([for sysroot])
+[AC_MSG_CHECKING([for sysroot])
 AC_ARG_WITH([sysroot],
 [AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@],
   [Search for dependent libraries within DIR (or the compiler's sysroot
@@ -1260,7 +1262,7 @@ case $with_sysroot in #(
    fi
    ;; #(
  /*)
-   lt_sysroot=`echo "$with_sysroot" | $SED -e "$sed_quote_subst"`
+   lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
    ;; #(
  no|'')
    ;; #(
@@ -1290,7 +1292,7 @@ ia64-*-hpux*)
   # options accordingly.
   echo 'int i;' > conftest.$ac_ext
   if AC_TRY_EVAL(ac_compile); then
-    case `$FILECMD conftest.$ac_objext` in
+    case `/usr/bin/file conftest.$ac_objext` in
       *ELF-32*)
        HPUX_IA64_MODE=32
        ;;
@@ -1307,7 +1309,7 @@ ia64-*-hpux*)
   echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext
   if AC_TRY_EVAL(ac_compile); then
     if test yes = "$lt_cv_prog_gnu_ld"; then
-      case `$FILECMD conftest.$ac_objext` in
+      case `/usr/bin/file conftest.$ac_objext` in
        *32-bit*)
          LD="${LD-ld} -melf32bsmip"
          ;;
@@ -1319,7 +1321,7 @@ ia64-*-hpux*)
        ;;
       esac
     else
-      case `$FILECMD conftest.$ac_objext` in
+      case `/usr/bin/file conftest.$ac_objext` in
        *32-bit*)
          LD="${LD-ld} -32"
          ;;
@@ -1341,7 +1343,7 @@ mips64*-*linux*)
   echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext
   if AC_TRY_EVAL(ac_compile); then
     emul=elf
-    case `$FILECMD conftest.$ac_objext` in
+    case `/usr/bin/file conftest.$ac_objext` in
       *32-bit*)
        emul="${emul}32"
        ;;
@@ -1349,7 +1351,7 @@ mips64*-*linux*)
        emul="${emul}64"
        ;;
     esac
-    case `$FILECMD conftest.$ac_objext` in
+    case `/usr/bin/file conftest.$ac_objext` in
       *MSB*)
        emul="${emul}btsmip"
        ;;
@@ -1357,7 +1359,7 @@ mips64*-*linux*)
        emul="${emul}ltsmip"
        ;;
     esac
-    case `$FILECMD conftest.$ac_objext` in
+    case `/usr/bin/file conftest.$ac_objext` in
       *N32*)
        emul="${emul}n32"
        ;;
@@ -1377,14 +1379,14 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
   # not appear in the list.
   echo 'int i;' > conftest.$ac_ext
   if AC_TRY_EVAL(ac_compile); then
-    case `$FILECMD conftest.o` in
+    case `/usr/bin/file conftest.o` in
       *32-bit*)
        case $host in
          x86_64-*kfreebsd*-gnu)
            LD="${LD-ld} -m elf_i386_fbsd"
            ;;
          x86_64-*linux*)
-           case `$FILECMD conftest.o` in
+           case `/usr/bin/file conftest.o` in
              *x86-64*)
                LD="${LD-ld} -m elf32_x86_64"
                ;;
@@ -1452,7 +1454,7 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
   # options accordingly.
   echo 'int i;' > conftest.$ac_ext
   if AC_TRY_EVAL(ac_compile); then
-    case `$FILECMD conftest.o` in
+    case `/usr/bin/file conftest.o` in
     *64-bit*)
       case $lt_cv_prog_gnu_ld in
       yes*)
@@ -1491,22 +1493,9 @@ need_locks=$enable_libtool_lock
 m4_defun([_LT_PROG_AR],
 [AC_CHECK_TOOLS(AR, [ar], false)
 : ${AR=ar}
+: ${AR_FLAGS=cru}
 _LT_DECL([], [AR], [1], [The archiver])
-
-# Use ARFLAGS variable as AR's operation code to sync the variable naming with
-# Automake.  If both AR_FLAGS and ARFLAGS are specified, AR_FLAGS should have
-# higher priority because thats what people were doing historically (setting
-# ARFLAGS for automake and AR_FLAGS for libtool).  FIXME: Make the AR_FLAGS
-# variable obsoleted/removed.
-
-test ${AR_FLAGS+y} || AR_FLAGS=${ARFLAGS-cr}
-lt_ar_flags=$AR_FLAGS
-_LT_DECL([], [lt_ar_flags], [0], [Flags to create an archive (by configure)])
-
-# Make AR_FLAGS overridable by 'make ARFLAGS='.  Don't try to run-time override
-# by AR_FLAGS because that was never working and AR_FLAGS is about to die.
-_LT_DECL([], [AR_FLAGS], [\@S|@{ARFLAGS-"\@S|@lt_ar_flags"}],
-         [Flags to create an archive])
+_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive])
 
 AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file],
   [lt_cv_ar_at_file=no
@@ -1725,7 +1714,7 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
     lt_cv_sys_max_cmd_len=8192;
     ;;
 
-  bitrig* | darwin* | dragonfly* | freebsd* | midnightbsd* | netbsd* | openbsd*)
+  bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*)
     # This has been around since 386BSD, at least.  Likely further.
     if test -x /sbin/sysctl; then
       lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
@@ -1768,7 +1757,7 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
   sysv5* | sco5v6* | sysv4.2uw2*)
     kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
     if test -n "$kargmax"; then
-      lt_cv_sys_max_cmd_len=`echo $kargmax | $SED 's/.*[[       ]]//'`
+      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[        ]]//'`
     else
       lt_cv_sys_max_cmd_len=32768
     fi
@@ -2218,35 +2207,26 @@ m4_defun([_LT_CMD_STRIPLIB],
 striplib=
 old_striplib=
 AC_MSG_CHECKING([whether stripping libraries is possible])
-if test -z "$STRIP"; then
-  AC_MSG_RESULT([no])
+if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  AC_MSG_RESULT([yes])
 else
-  if $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
-    old_striplib="$STRIP --strip-debug"
-    striplib="$STRIP --strip-unneeded"
-    AC_MSG_RESULT([yes])
-  else
-    case $host_os in
-    darwin*)
-      # FIXME - insert some real tests, host_os isn't really good enough
+# FIXME - insert some real tests, host_os isn't really good enough
+  case $host_os in
+  darwin*)
+    if test -n "$STRIP"; then
       striplib="$STRIP -x"
       old_striplib="$STRIP -S"
       AC_MSG_RESULT([yes])
-      ;;
-    freebsd*)
-      if $STRIP -V 2>&1 | $GREP "elftoolchain" >/dev/null; then
-        old_striplib="$STRIP --strip-debug"
-        striplib="$STRIP --strip-unneeded"
-        AC_MSG_RESULT([yes])
-      else
-        AC_MSG_RESULT([no])
-      fi
-      ;;
-    *)
+    else
       AC_MSG_RESULT([no])
-      ;;
-    esac
-  fi
+    fi
+    ;;
+  *)
+    AC_MSG_RESULT([no])
+    ;;
+  esac
 fi
 _LT_DECL([], [old_striplib], [1], [Commands to strip libraries])
 _LT_DECL([], [striplib], [1])
@@ -2569,7 +2549,7 @@ cygwin* | mingw* | pw32* | cegcc*)
     case $host_os in
     cygwin*)
       # Cygwin DLLs use 'cyg' prefix rather than 'lib'
-      soname_spec='`echo $libname | $SED -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
+      soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
 m4_if([$1], [],[
       sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"])
       ;;
@@ -2579,14 +2559,14 @@ m4_if([$1], [],[
       ;;
     pw32*)
       # pw32 DLLs use 'pw' prefix rather than 'lib'
-      library_names_spec='`echo $libname | $SED -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
+      library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
       ;;
     esac
     dynamic_linker='Win32 ld.exe'
     ;;
 
-  *,cl* | *,icl*)
-    # Native MSVC or ICC
+  *,cl*)
+    # Native MSVC
     libname_spec='$name'
     soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
     library_names_spec='$libname.dll.lib'
@@ -2605,7 +2585,7 @@ m4_if([$1], [],[
       done
       IFS=$lt_save_ifs
       # Convert to MSYS style.
-      sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'`
+      sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'`
       ;;
     cygwin*)
       # Convert to unix form, then to dos form, then back to unix form
@@ -2642,7 +2622,7 @@ m4_if([$1], [],[
     ;;
 
   *)
-    # Assume MSVC and ICC wrapper
+    # Assume MSVC wrapper
     library_names_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext $libname.lib'
     dynamic_linker='Win32 ld.exe'
     ;;
@@ -2675,7 +2655,7 @@ dgux*)
   shlibpath_var=LD_LIBRARY_PATH
   ;;
 
-freebsd* | dragonfly* | midnightbsd*)
+freebsd* | dragonfly*)
   # DragonFly does not have aout.  When/if they implement a new
   # versioning mechanism, adjust this.
   if test -x /usr/bin/objformat; then
@@ -3477,7 +3457,7 @@ beos*)
 
 bsdi[[45]]*)
   lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
-  lt_cv_file_magic_cmd='$FILECMD -L'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
   lt_cv_file_magic_test_file=/shlib/libc.so
   ;;
 
@@ -3511,14 +3491,14 @@ darwin* | rhapsody*)
   lt_cv_deplibs_check_method=pass_all
   ;;
 
-freebsd* | dragonfly* | midnightbsd*)
+freebsd* | dragonfly*)
   if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
     case $host_cpu in
     i*86 )
       # Not sure whether the presence of OpenBSD here was a mistake.
       # Let's accept both of them until this is cleared up.
       lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
-      lt_cv_file_magic_cmd=$FILECMD
+      lt_cv_file_magic_cmd=/usr/bin/file
       lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
       ;;
     esac
@@ -3532,7 +3512,7 @@ haiku*)
   ;;
 
 hpux10.20* | hpux11*)
-  lt_cv_file_magic_cmd=$FILECMD
+  lt_cv_file_magic_cmd=/usr/bin/file
   case $host_cpu in
   ia64*)
     lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
@@ -3579,7 +3559,7 @@ netbsd*)
 
 newos6*)
   lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
-  lt_cv_file_magic_cmd=$FILECMD
+  lt_cv_file_magic_cmd=/usr/bin/file
   lt_cv_file_magic_test_file=/usr/lib/libnls.so
   ;;
 
@@ -3706,13 +3686,13 @@ else
        mingw*) lt_bad_file=conftest.nm/nofile ;;
        *) lt_bad_file=/dev/null ;;
        esac
-       case `"$tmp_nm" -B $lt_bad_file 2>&1 | $SED '1q'` in
+       case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in
        *$lt_bad_file* | *'Invalid file or object type'*)
          lt_cv_path_NM="$tmp_nm -B"
          break 2
          ;;
        *)
-         case `"$tmp_nm" -p /dev/null 2>&1 | $SED '1q'` in
+         case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
          */dev/null*)
            lt_cv_path_NM="$tmp_nm -p"
            break 2
@@ -3738,7 +3718,7 @@ else
     # Let the user override the test.
   else
     AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :)
-    case `$DUMPBIN -symbols -headers /dev/null 2>&1 | $SED '1q'` in
+    case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in
     *COFF*)
       DUMPBIN="$DUMPBIN -symbols -headers"
       ;;
@@ -3978,7 +3958,7 @@ esac
 
 if test "$lt_cv_nm_interface" = "MS dumpbin"; then
   # Gets list of data symbols to import.
-  lt_cv_sys_global_symbol_to_import="$SED -n -e 's/^I .* \(.*\)$/\1/p'"
+  lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'"
   # Adjust the below global symbol transforms to fixup imported variables.
   lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'"
   lt_c_name_hook=" -e 's/^I .* \(.*\)$/  {\"\1\", (void *) 0},/p'"
@@ -3996,20 +3976,20 @@ fi
 # Transform an extracted symbol line into a proper C declaration.
 # Some systems (esp. on ia64) link data and code symbols differently,
 # so use this general approach.
-lt_cv_sys_global_symbol_to_cdecl="$SED -n"\
+lt_cv_sys_global_symbol_to_cdecl="sed -n"\
 $lt_cdecl_hook\
 " -e 's/^T .* \(.*\)$/extern int \1();/p'"\
 " -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'"
 
 # Transform an extracted symbol line into symbol name and symbol address
-lt_cv_sys_global_symbol_to_c_name_address="$SED -n"\
+lt_cv_sys_global_symbol_to_c_name_address="sed -n"\
 $lt_c_name_hook\
 " -e 's/^: \(.*\) .*$/  {\"\1\", (void *) 0},/p'"\
 " -e 's/^$symcode$symcode* .* \(.*\)$/  {\"\1\", (void *) \&\1},/p'"
 
 # Transform an extracted symbol line into symbol name with lib prefix and
 # symbol address.
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="$SED -n"\
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\
 $lt_c_name_lib_hook\
 " -e 's/^: \(.*\) .*$/  {\"\1\", (void *) 0},/p'"\
 " -e 's/^$symcode$symcode* .* \(lib.*\)$/  {\"\1\", (void *) \&\1},/p'"\
@@ -4033,7 +4013,7 @@ for ac_symprfx in "" "_"; do
   if test "$lt_cv_nm_interface" = "MS dumpbin"; then
     # Fake it for dumpbin and say T for any non-static function,
     # D for any global variable and I for any imported variable.
-    # Also find C++ and __fastcall symbols from MSVC++ or ICC,
+    # Also find C++ and __fastcall symbols from MSVC++,
     # which start with @ or ?.
     lt_cv_sys_global_symbol_pipe="$AWK ['"\
 "     {last_section=section; section=\$ 3};"\
@@ -4051,9 +4031,9 @@ for ac_symprfx in "" "_"; do
 "     s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\
 "     ' prfx=^$ac_symprfx]"
   else
-    lt_cv_sys_global_symbol_pipe="$SED -n -e 's/^.*[[   ]]\($symcode$symcode*\)[[       ]][[    ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+    lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[    ]]\($symcode$symcode*\)[[       ]][[    ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
   fi
-  lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | $SED '/ __gnu_lto/d'"
+  lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
 
   # Check to see that the pipe works correctly.
   pipe_works=no
@@ -4340,7 +4320,7 @@ m4_if([$1], [CXX], [
            ;;
        esac
        ;;
-      freebsd* | dragonfly* | midnightbsd*)
+      freebsd* | dragonfly*)
        # FreeBSD uses GNU C++
        ;;
       hpux9* | hpux10* | hpux11*)
@@ -4423,7 +4403,7 @@ m4_if([$1], [CXX], [
            _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
            ;;
          *)
-           case `$CC -V 2>&1 | $SED 5q` in
+           case `$CC -V 2>&1 | sed 5q` in
            *Sun\ C*)
              # Sun C++ 5.9
              _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
@@ -4759,7 +4739,7 @@ m4_if([$1], [CXX], [
        _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
        ;;
       *)
-       case `$CC -V 2>&1 | $SED 5q` in
+       case `$CC -V 2>&1 | sed 5q` in
        *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*)
          # Sun Fortran 8.3 passes all unrecognized flags to the linker
          _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
@@ -4942,7 +4922,7 @@ m4_if([$1], [CXX], [
     if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
       _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
     else
-      _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
+      _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
     fi
     ;;
   pw32*)
@@ -4950,7 +4930,7 @@ m4_if([$1], [CXX], [
     ;;
   cygwin* | mingw* | cegcc*)
     case $cc_basename in
-    cl* | icl*)
+    cl*)
       _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
       ;;
     *)
@@ -5007,15 +4987,15 @@ dnl Note also adjust exclude_expsyms for C++ above.
 
   case $host_os in
   cygwin* | mingw* | pw32* | cegcc*)
-    # FIXME: the MSVC++ and ICC port hasn't been tested in a loooong time
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
     # When not using gcc, we currently assume that we are using
-    # Microsoft Visual C++ or Intel C++ Compiler.
+    # Microsoft Visual C++.
     if test yes != "$GCC"; then
       with_gnu_ld=no
     fi
     ;;
   interix*)
-    # we just hope/assume this is gcc and not c89 (= MSVC++ or ICC)
+    # we just hope/assume this is gcc and not c89 (= MSVC++)
     with_gnu_ld=yes
     ;;
   openbsd* | bitrig*)
@@ -5067,7 +5047,7 @@ dnl Note also adjust exclude_expsyms for C++ above.
       _LT_TAGVAR(whole_archive_flag_spec, $1)=
     fi
     supports_anon_versioning=no
-    case `$LD -v | $SED -e 's/([[^)]]\+)\s\+//' 2>&1` in
+    case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in
       *GNU\ gold*) supports_anon_versioning=yes ;;
       *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
       *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
@@ -5179,7 +5159,6 @@ _LT_EOF
        emximp -o $lib $output_objdir/$libname.def'
       _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
       _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-      _LT_TAGVAR(file_list_spec, $1)='@'
       ;;
 
     interix[[3-9]]*)
@@ -5194,7 +5173,7 @@ _LT_EOF
       # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
       # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-      _LT_TAGVAR(archive_expsym_cmds, $1)='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+      _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
       ;;
 
     gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
@@ -5237,7 +5216,7 @@ _LT_EOF
          _LT_TAGVAR(compiler_needs_object, $1)=yes
          ;;
        esac
-       case `$CC -V 2>&1 | $SED 5q` in
+       case `$CC -V 2>&1 | sed 5q` in
        *Sun\ C*)                       # Sun C 5.9
          _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
          _LT_TAGVAR(compiler_needs_object, $1)=yes
@@ -5249,7 +5228,7 @@ _LT_EOF
 
         if test yes = "$supports_anon_versioning"; then
           _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
-            cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+            cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
             echo "local: *; };" >> $output_objdir/$libname.ver~
             $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
         fi
@@ -5265,7 +5244,7 @@ _LT_EOF
          _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
          if test yes = "$supports_anon_versioning"; then
            _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
-              cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+              cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
               echo "local: *; };" >> $output_objdir/$libname.ver~
               $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
          fi
@@ -5397,7 +5376,7 @@ _LT_EOF
        if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
          _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
        else
-         _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
+         _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
        fi
        aix_use_runtimelinking=no
 
@@ -5580,12 +5559,12 @@ _LT_EOF
 
     cygwin* | mingw* | pw32* | cegcc*)
       # When not using gcc, we currently assume that we are using
-      # Microsoft Visual C++ or Intel C++ Compiler.
+      # Microsoft Visual C++.
       # hardcode_libdir_flag_spec is actually meaningless, as there is
       # no search path for DLLs.
       case $cc_basename in
-      cl* | icl*)
-       # Native MSVC or ICC
+      cl*)
+       # Native MSVC
        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
        _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
        _LT_TAGVAR(always_export_symbols, $1)=yes
@@ -5626,7 +5605,7 @@ _LT_EOF
           fi'
        ;;
       *)
-       # Assume MSVC and ICC wrapper
+       # Assume MSVC wrapper
        _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
        _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
        # Tell ltmain to make .lib files, not .a files.
@@ -5674,7 +5653,7 @@ _LT_EOF
       ;;
 
     # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
-    freebsd* | dragonfly* | midnightbsd*)
+    freebsd* | dragonfly*)
       _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
       _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
       _LT_TAGVAR(hardcode_direct, $1)=yes
@@ -5885,7 +5864,6 @@ _LT_EOF
        emximp -o $lib $output_objdir/$libname.def'
       _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
       _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-      _LT_TAGVAR(file_list_spec, $1)='@'
       ;;
 
     osf3*)
@@ -6656,8 +6634,8 @@ if test yes != "$_lt_caught_CXX_error"; then
 
       cygwin* | mingw* | pw32* | cegcc*)
        case $GXX,$cc_basename in
-       ,cl* | no,cl* | ,icl* | no,icl*)
-         # Native MSVC or ICC
+       ,cl* | no,cl*)
+         # Native MSVC
          # hardcode_libdir_flag_spec is actually meaningless, as there is
          # no search path for DLLs.
          _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
@@ -6755,7 +6733,6 @@ if test yes != "$_lt_caught_CXX_error"; then
          emximp -o $lib $output_objdir/$libname.def'
        _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
        _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-       _LT_TAGVAR(file_list_spec, $1)='@'
        ;;
 
       dgux*)
@@ -6786,7 +6763,7 @@ if test yes != "$_lt_caught_CXX_error"; then
         _LT_TAGVAR(archive_cmds_need_lc, $1)=no
         ;;
 
-      freebsd* | dragonfly* | midnightbsd*)
+      freebsd* | dragonfly*)
         # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
         # conventions
         _LT_TAGVAR(ld_shlibs, $1)=yes
@@ -6923,7 +6900,7 @@ if test yes != "$_lt_caught_CXX_error"; then
        # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
        # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
        _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
-       _LT_TAGVAR(archive_expsym_cmds, $1)='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+       _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
        ;;
       irix5* | irix6*)
         case $cc_basename in
@@ -7063,13 +7040,13 @@ if test yes != "$_lt_caught_CXX_error"; then
            _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
            if test yes = "$supports_anon_versioning"; then
              _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
-                cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+                cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
                 echo "local: *; };" >> $output_objdir/$libname.ver~
                 $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
            fi
            ;;
          *)
-           case `$CC -V 2>&1 | $SED 5q` in
+           case `$CC -V 2>&1 | sed 5q` in
            *Sun\ C*)
              # Sun C++ 5.9
              _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
@@ -8215,14 +8192,6 @@ _LT_DECL([], [DLLTOOL], [1], [DLL creation program])
 AC_SUBST([DLLTOOL])
 ])
 
-# _LT_DECL_FILECMD
-# ----------------
-# Check for a file(cmd) program that can be used to detect file type and magic
-m4_defun([_LT_DECL_FILECMD],
-[AC_CHECK_TOOL([FILECMD], [file], [:])
-_LT_DECL([], [FILECMD], [1], [A file(cmd) program that detects file types])
-])# _LD_DECL_FILECMD
-
 # _LT_DECL_SED
 # ------------
 # Check for a fully-functional sed program, that truncates
index b0b5e9c21260626dbace09fdb80b1fddb5a90db8..94b082976667c0c9edf2e9ff7a668c1fd7d997bf 100644 (file)
@@ -1,7 +1,7 @@
 # Helper functions for option handling.                    -*- Autoconf -*-
 #
-#   Copyright (C) 2004-2005, 2007-2009, 2011-2019, 2021-2022 Free
-#   Software Foundation, Inc.
+#   Copyright (C) 2004-2005, 2007-2009, 2011-2015 Free Software
+#   Foundation, Inc.
 #   Written by Gary V. Vaughan, 2004
 #
 # This file is free software; the Free Software Foundation gives
index 902508bd93aec6b21aa65636f69eaeb7c9b67329..48bc9344a4d661e116be1483d5520753875b2bd1 100644 (file)
@@ -1,6 +1,6 @@
 # ltsugar.m4 -- libtool m4 base layer.                         -*-Autoconf-*-
 #
-# Copyright (C) 2004-2005, 2007-2008, 2011-2019, 2021-2022 Free Software
+# Copyright (C) 2004-2005, 2007-2008, 2011-2015 Free Software
 # Foundation, Inc.
 # Written by Gary V. Vaughan, 2004
 #
index b155d0aceca376bf6b735cbac50cf0c593c73d32..fa04b52a3bf868bd57e7ba796d64385a51e7ec5a 100644 (file)
@@ -1,7 +1,6 @@
 # ltversion.m4 -- version numbers                      -*- Autoconf -*-
 #
-#   Copyright (C) 2004, 2011-2019, 2021-2022 Free Software Foundation,
-#   Inc.
+#   Copyright (C) 2004, 2011-2015 Free Software Foundation, Inc.
 #   Written by Scott James Remnant, 2004
 #
 # This file is free software; the Free Software Foundation gives
 
 # @configure_input@
 
-# serial 4245 ltversion.m4
+# serial 4179 ltversion.m4
 # This file is part of GNU Libtool
 
-m4_define([LT_PACKAGE_VERSION], [2.4.7])
-m4_define([LT_PACKAGE_REVISION], [2.4.7])
+m4_define([LT_PACKAGE_VERSION], [2.4.6])
+m4_define([LT_PACKAGE_REVISION], [2.4.6])
 
 AC_DEFUN([LTVERSION_VERSION],
-[macro_version='2.4.7'
-macro_revision='2.4.7'
+[macro_version='2.4.6'
+macro_revision='2.4.6'
 _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
 _LT_DECL(, macro_revision, 0)
 ])
index 0f7a8759da8d46df4a9996141d7138ca680cce6b..c6b26f88f6c3c1a052afa6314ba2adf832d785ee 100644 (file)
@@ -1,7 +1,7 @@
 # lt~obsolete.m4 -- aclocal satisfying obsolete definitions.    -*-Autoconf-*-
 #
-#   Copyright (C) 2004-2005, 2007, 2009, 2011-2019, 2021-2022 Free
-#   Software Foundation, Inc.
+#   Copyright (C) 2004-2005, 2007, 2009, 2011-2015 Free Software
+#   Foundation, Inc.
 #   Written by Scott James Remnant, 2004.
 #
 # This file is free software; the Free Software Foundation gives
index d4217db1b3c6d92bfe4bc1b2246aac481b6f96b9..70d8386348ed13ce323a76e0beba8e87fd3fd311 100644 (file)
@@ -1,5 +1,5 @@
 # libguestfs virt-diff
-# Copyright (C) 2010-2020 Red Hat Inc.
+# Copyright (C) 2010-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index cdfdba36a8b00e31ed43f0beb6caf094bff59000..30a884e0263b1cf8cb909eefdbc02ccfbf82a742 100644 (file)
@@ -15,7 +15,7 @@
 @SET_MAKE@
 
 # libguestfs virt-diff
-# Copyright (C) 2010-2020 Red Hat Inc.
+# Copyright (C) 2010-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -32,7 +32,7 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -488,7 +488,6 @@ EGREP = @EGREP@
 ETAGS = @ETAGS@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FILECMD = @FILECMD@
 GCC_VISIBILITY_HIDDEN = @GCC_VISIBILITY_HIDDEN@
 GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
 GMSGFMT = @GMSGFMT@
@@ -517,6 +516,8 @@ LIBINTL = @LIBINTL@
 LIBLZMA_CFLAGS = @LIBLZMA_CFLAGS@
 LIBLZMA_LIBS = @LIBLZMA_LIBS@
 LIBOBJS = @LIBOBJS@
+LIBOSINFO_CFLAGS = @LIBOSINFO_CFLAGS@
+LIBOSINFO_LIBS = @LIBOSINFO_LIBS@
 LIBS = @LIBS@
 LIBTINFO_CFLAGS = @LIBTINFO_CFLAGS@
 LIBTINFO_LIBS = @LIBTINFO_LIBS@
@@ -587,6 +588,7 @@ PO4A_TRANSLATE = @PO4A_TRANSLATE@
 PODWRAPPER = @PODWRAPPER@
 POSUB = @POSUB@
 RANLIB = @RANLIB@
+REALPATH = @REALPATH@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
index efbb028f19c148c4258aaba295601e9325095762..7837b61bee7f0bb4e134bcca66bb3b12edb95566 100644 (file)
@@ -1,5 +1,5 @@
 /* virt-make-fs
- * Copyright (C) 2010-2020 Red Hat Inc.
+ * Copyright (C) 2010-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -83,7 +83,7 @@ usage (int status)
              getprogname ());
   else {
     printf (_("%s: make a filesystem from a tar archive or files\n"
-              "Copyright (C) 2010-2020 Red Hat Inc.\n"
+              "Copyright (C) 2010-2023 Red Hat Inc.\n"
               "Usage:\n"
               "  %s [--options] input.tar output.img\n"
               "  %s [--options] input.tar.gz output.img\n"
index 95122b795692d38a1a42550fdcc93ba85c4b60bb..2435155be9d3bcb62089600fb1aae9b6f3aba4f1 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/bash -
 # libguestfs
-# Copyright (C) 2010-2020 Red Hat Inc.
+# Copyright (C) 2010-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index 54823c07ce51a591d8bcf21b5bbde8e451678c7f..442df5b7f4c2c6183fc3887ab7ab2ad3f0bea3a6 100644 (file)
@@ -242,4 +242,4 @@ Richard W.M. Jones L<http://people.redhat.com/~rjones/>
 
 =head1 COPYRIGHT
 
-Copyright (C) 2010-2020 Red Hat Inc.
+Copyright (C) 2010-2023 Red Hat Inc.
index eaa219da82ab093b15cc45988ee77ec4f01bea0c..a97403e186d0f53846e96a0d959b3080c737daf2 100755 (executable)
@@ -1,5 +1,5 @@
 #!/bin/bash -
-# (C) Copyright 2009-2020 Red Hat Inc.
+# (C) Copyright 2009-2023 Red Hat Inc.
 # @configure_input@
 #
 # This program is free software; you can redistribute it and/or modify
@@ -33,7 +33,7 @@ set -e
 # directories must have unique names (eg. not ‘Utils’) else
 # dependencies don't get built right.
 include_dirs="
-bundled/ocaml-augeas
+common/mldrivers
 common/mlgettext
 common/mlpcre
 common/mlprogress
@@ -49,10 +49,10 @@ ocaml
 # Output file is always created in the current directory.
 output=.depend
 
-subdir=$(realpath --relative-to=@abs_top_builddir@ .)
-srcdir=$(realpath --relative-to=. @abs_top_srcdir@/${subdir})
-srcdir_re=$(realpath --relative-to=. @abs_top_srcdir@/${subdir} | sed 's/\./[.]/g')
-top_builddir=$(realpath --relative-to=. @abs_top_builddir@)
+subdir=$(@REALPATH@ --relative-to=@abs_top_builddir@ .)
+srcdir=$(@REALPATH@ --relative-to=. @abs_top_srcdir@/${subdir})
+srcdir_re=$(@REALPATH@ --relative-to=. @abs_top_srcdir@/${subdir} | sed 's/\./[.]/g')
+top_builddir=$(@REALPATH@ --relative-to=. @abs_top_builddir@)
 
 includes="-I @abs_top_srcdir@/$subdir -I @abs_top_builddir@/$subdir"
 for i in $include_dirs; do
index 8f77dc252d59eee36d397eb5bc36035fb02a859b..e5d3c60bd3ac335d4266eeed184caa80adb0e38f 100755 (executable)
@@ -1,7 +1,7 @@
 #!/bin/bash -
 # Script used to link OCaml programs.
 # @configure_input@
-# (C) Copyright 2015-2020 Red Hat Inc.
+# (C) Copyright 2015-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index ca8da70a3f60120682cfaccf65560d08c7a63342..800c25819bfaa851fd53c1a621d9d56133eeb2d2 100644 (file)
@@ -1,5 +1,5 @@
 # libguestfs translations of man pages and POD files
-# Copyright (C) 2010-2012 Red Hat Inc.
+# Copyright (C) 2010-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index 5fa2fd8ca2a8a7661e1d3ad65f004d6b94d11a89..12f4614a9c4fe688cf1bd8ba47f7de4cec2b5d18 100644 (file)
@@ -15,7 +15,7 @@
 @SET_MAKE@
 
 # libguestfs translations of man pages and POD files
-# Copyright (C) 2010-2012 Red Hat Inc.
+# Copyright (C) 2010-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -32,7 +32,7 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -276,7 +276,6 @@ EGREP = @EGREP@
 ETAGS = @ETAGS@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FILECMD = @FILECMD@
 GCC_VISIBILITY_HIDDEN = @GCC_VISIBILITY_HIDDEN@
 GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
 GMSGFMT = @GMSGFMT@
@@ -305,6 +304,8 @@ LIBINTL = @LIBINTL@
 LIBLZMA_CFLAGS = @LIBLZMA_CFLAGS@
 LIBLZMA_LIBS = @LIBLZMA_LIBS@
 LIBOBJS = @LIBOBJS@
+LIBOSINFO_CFLAGS = @LIBOSINFO_CFLAGS@
+LIBOSINFO_LIBS = @LIBOSINFO_LIBS@
 LIBS = @LIBS@
 LIBTINFO_CFLAGS = @LIBTINFO_CFLAGS@
 LIBTINFO_LIBS = @LIBTINFO_LIBS@
@@ -375,6 +376,7 @@ PO4A_TRANSLATE = @PO4A_TRANSLATE@
 PODWRAPPER = @PODWRAPPER@
 POSUB = @POSUB@
 RANLIB = @RANLIB@
+REALPATH = @REALPATH@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
index a6ebec23abace2c067a9d9153570e85d316b2475..2c804de78c2e377dd63a84c0d5f0ac07da876718 100644 (file)
@@ -1,5 +1,5 @@
 # libguestfs translations of man pages and POD files
-# Copyright (C) 2010-2012 Red Hat Inc.
+# Copyright (C) 2010-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index b977842e66e51d1c6e27eccb444ee7a44fc6e3c8..3ac74e3e9e3d2787dc2da4882f17e38c7cf2e113 100644 (file)
@@ -15,7 +15,7 @@
 @SET_MAKE@
 
 # libguestfs translations of man pages and POD files
-# Copyright (C) 2010-2012 Red Hat Inc.
+# Copyright (C) 2010-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -37,7 +37,7 @@
 # All the actual logic should be in language.mk.
 
 # libguestfs translations of man pages and POD files
-# Copyright (C) 2010-2012 Red Hat Inc.
+# Copyright (C) 2010-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -56,7 +56,7 @@
 # Common logic for generating translated documentation.
 
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -242,7 +242,6 @@ EGREP = @EGREP@
 ETAGS = @ETAGS@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FILECMD = @FILECMD@
 GCC_VISIBILITY_HIDDEN = @GCC_VISIBILITY_HIDDEN@
 GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
 GMSGFMT = @GMSGFMT@
@@ -271,6 +270,8 @@ LIBINTL = @LIBINTL@
 LIBLZMA_CFLAGS = @LIBLZMA_CFLAGS@
 LIBLZMA_LIBS = @LIBLZMA_LIBS@
 LIBOBJS = @LIBOBJS@
+LIBOSINFO_CFLAGS = @LIBOSINFO_CFLAGS@
+LIBOSINFO_LIBS = @LIBOSINFO_LIBS@
 LIBS = @LIBS@
 LIBTINFO_CFLAGS = @LIBTINFO_CFLAGS@
 LIBTINFO_LIBS = @LIBTINFO_LIBS@
@@ -341,6 +342,7 @@ PO4A_TRANSLATE = @PO4A_TRANSLATE@
 PODWRAPPER = @PODWRAPPER@
 POSUB = @POSUB@
 RANLIB = @RANLIB@
+REALPATH = @REALPATH@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
index c852704d3a8bfbeda891e262d77c705469dda4f7..39e53b4d0253fb2021cf8ebd43c4cb49282ec735 100644 (file)
@@ -7,7 +7,7 @@ libguestfs generated file
           and from the code in the generator/ subdirectory.
  ANY CHANGES YOU MAKE TO THIS FILE WILL BE LOST.
 
- Copyright (C) 2009-2020 Red Hat Inc.
+ Copyright (C) 2009-2023 Red Hat Inc.
 
  This program is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
@@ -138,6 +138,38 @@ For an overview on the different ways to install packages, see L<virt-builder(1)
 
 Set the hostname of the guest to C<HOSTNAME>.  You can use a dotted hostname.domainname (FQDN) if you want.
 
+=item B<--inject-qemu-ga> METHOD
+
+Inject the QEMU Guest Agent into a Windows guest.  The guest agent communicates with qemu through a socket in order to provide enhanced features (see L<qemu-ga(8)>).  This operation also injects a firstboot script so that the Guest Agent is installed when the guest boots.
+
+The parameter is the same as used by the I<--inject-virtio-win> operation.
+
+Note that to do a full conversion of a Windows guest from a foreign hypervisor like VMware (which involves many other operations)  you should use the L<virt-v2v(1)> tool instead of this.
+
+=item B<--inject-virtio-win> METHOD
+
+Inject virtio-win drivers into a Windows guest.  These drivers add virtio accelerated drivers suitable when running on top of a hypervisor that supports virtio (such as qemu/KVM).  The operation also adjusts the Windows Registry so that the drivers are installed when the guest boots.
+
+The parameter can be one of:
+
+=over 4
+
+=item ISO
+
+The path to the ISO image containing the virtio-win drivers (eg. F</usr/share/virtio-win/virtio-win.iso>).
+
+=item DIR
+
+The directory containing the unpacked virtio-win drivers (eg. F</usr/share/virtio-win>).
+
+=item B<"osinfo">
+
+The literal string C<"osinfo"> means to use the libosinfo database to locate the drivers.  (See L<osinfo-query(1)>.
+
+=back
+
+Note that to do a full conversion of a Windows guest from a foreign hypervisor like VMware (which involves many other operations)  you should use the L<virt-v2v(1)> tool instead of this.
+
 =item B<--install> PKG,PKG..
 
 Install the named packages (a comma-separated list).  These are installed during the image build using the guest’s package manager (eg. apt, yum, etc.) and the host’s network connection.
@@ -168,6 +200,14 @@ Scrub C<builder.log> (log file from build commands) from the image after buildin
 
 See also: L</LOG FILE>.
 
+=item B<--no-selinux-relabel>
+
+Do not attempt to correct the SELinux labels of files in the guest.
+
+In such guests that support SELinux, customization automatically relabels files so that they have the correct SELinux label.  (The relabeling is performed immediately, but if the operation fails, customization will instead touch F</.autorelabel> on the image to schedule a relabel operation for the next time the image boots.)  This option disables the automatic relabeling.
+
+The option is a no-op for guests that do not support SELinux.
+
 =item B<--password> USER:SELECTOR
 
 Set the password for C<USER>.  (Note this option does I<not> create the user account).
@@ -234,11 +274,7 @@ It cannot delete directories, only regular files.
 
 =item B<--selinux-relabel>
 
-Relabel files in the guest so that they have the correct SELinux label.
-
-This will attempt to relabel files immediately, but if the operation fails this will instead touch F</.autorelabel> on the image to schedule a relabel operation for the next time the image boots.
-
-You should only use this option for guests which support SELinux.
+This is a compatibility option that does nothing.
 
 =item B<--sm-attach> SELECTOR
 
index a6a36ae9b48557540e2a18791a068705ef8ac14b..27b00a33ad4b42777e79ac2eaa8c8480c77db1a2 100644 (file)
@@ -111,5 +111,5 @@ git shortlog -s v1.46.0..
 
 =head1 COPYRIGHT
 
-Copyright (C) 2009-2022 Red Hat Inc.
+Copyright (C) 2009-2023 Red Hat Inc.
 
diff --git a/po-docs/ja/guestfs-tools-release-notes-1.50.pod b/po-docs/ja/guestfs-tools-release-notes-1.50.pod
new file mode 100644 (file)
index 0000000..ca49c8b
--- /dev/null
@@ -0,0 +1,163 @@
+
+=head1 名前
+
+guestfs-tools-release-notes - guestfs tools release Notes
+
+=head1 RELEASE NOTES FOR GUESTFS TOOLS 1.50
+
+These are the release notes for guestfs tools stable release 1.50.  This describes the major changes since 1.48.
+
+Guestfs tools 1.50.0 was released on B<7 February 2023>.
+
+=head2 Security
+
+=over 4
+
+=item CVE-2022-2211
+
+L<https://bugzilla.redhat.com/show_bug.cgi?id=2100862>
+
+A buffer overflow was found in the I<--key> option of several guestfs tools.  For more information on this low severity bug see the bug report above (Laszlo Ersek).
+
+=back
+
+=head2 New virt-drivers tool
+
+This new tool can examine a disk image to determine:
+
+=over 4
+
+=item *
+
+Whether it uses BIOS or UEFI for booting
+
+=item *
+
+What bootloader it uses (Linux only)
+
+=item *
+
+What kernels may be chosen at boot time (Linux only)
+
+=item *
+
+What device drivers (kernel modules) are installed
+
+=back
+
+This is useful for determining how (or if) a guest can boot on a virtualization hypervisor.
+
+=head2 virt-customize
+
+I<--selinux-relabel> is now the default for SELinux guests.  You no longer need to specify this flag.  In the rare case where you don't want to relabel a guest after customizing it, you can use I<--no-selinux-relabel>.  Note this is not needed for non-SELinux guests, it will do the right thing automatically (Laszlo Ersek).
+
+New I<--inject-qemu-ga> and I<--inject-virtio-win> operations which respectively inject QEMU Guest Agent and virtio-win drivers into Windows guests.
+
+Rocky Linux guests are now supported (thanks Harry Benson).
+
+=head2 virt-inspector
+
+Virt-inspector now outputs the new E<lt>build_idE<gt> element containing the guest build ID, if using libguestfs E<ge> 1.50.
+
+=head2 virt-sysprep
+
+New C<lvm-system-devices> operation for removing LVM2's F<system.devices> file.  This avoids certain problems when cloning a VM (Laszlo Ersek).
+
+Virt-sysprep supports guests using LUKS logical volumes on top of LVM (Laszlo Ersek).
+
+=head2 Common changes
+
+All the tools supporting the I<--key> option can now use Clevis/Tang to decrypt full disk encryption using this network-based scheme (Laszlo Ersek).
+
+=head2 Build changes
+
+B<Note> that libguestfs now requires minimum OCaml 4.04.  It will not compile on RHEL 6.
+
+B<Note> that libosinfo is a new required dependency.
+
+OCaml 4.14 is now supported.
+
+C<./configure --disable-ocaml> and C<./configure --disable-perl> now disable the OCaml- and Perl-based tools respectively (thanks Simon Walter).
+
+Experimental support for compiling on macOS.
+
+When running C<make check-valgrind>, Valgrind logs are no longer written to separate files under F<tmp/>.  Instead the output is written to the normal F<I<test-name>.log> file.
+
+=begin コメント
+
+=head2 内部
+
+=end コメント
+
+=head2 バグ修正
+
+=begin コメント
+
+https_proxy= ./bugs-in-changelog.sh v1.48.0..
+
+=end コメント
+
+=over 4
+
+=item L<https://bugzilla.redhat.com/2133443>
+
+RFE: Support Rocky Linux in virt-customize
+
+=item L<https://bugzilla.redhat.com/2106286>
+
+virt-sysprep: make an effort to support LUKS on LV
+
+=item L<https://bugzilla.redhat.com/2089748>
+
+Removal of "--selinux-relabel" option breaks existing scripts
+
+=item L<https://bugzilla.redhat.com/2075718>
+
+Having to use "--selinux-relabel" is not intuitive given Red Hat products default to selinux enabled.
+
+=item L<https://bugzilla.redhat.com/2072493>
+
+[RFE] Request to add lvm system.devices cleanup operation to virt-sysprep
+
+=item L<https://bugzilla.redhat.com/2059545>
+
+[RHEL 9.0][Nutanix] lvm partition "home" will lost with SCSI disk either in the new cloned VM or restored from a snapshot
+
+=item L<https://bugzilla.redhat.com/2028764>
+
+Install the qemu-guest-agent package during the conversion process
+
+=item L<https://bugzilla.redhat.com/1809453>
+
+[RFE] Add support for LUKS encrypted disks with Clevis & Tang
+
+=item L<https://bugzilla.redhat.com/1554735>
+
+RFE: customize --selinux-relabel should be the default, with --no-selinux-relabel used to opt out
+
+=back
+
+=head1 関連項目
+
+L<http://libguestfs.org/>
+
+=head1 著者
+
+=begin コメント
+
+git shortlog -s v1.48.0..
+
+=end コメント
+
+=over 4
+
+=item Laszlo Ersek
+
+=item Richard W.M. Jones
+
+=back
+
+=head1 COPYRIGHT
+
+Copyright (C) 2009-2023 Red Hat Inc.
+
index d22bcce794862145dff6bef8867f85343dc4bb29..891244832155cb5c0193f8b61d016f3c5d7ed09a 100644 (file)
@@ -13,5 +13,11 @@ Use the specified C<KEY_STRING> as passphrase.
 
 Read the passphrase from F<FILENAME>.
 
+=item B<--key> C<ID>:clevis
+
+Attempt passphrase-less unlocking for C<ID> with Clevis, over the network. Please refer to L<guestfs(3)/ENCRYPTED DISKS> for more information on network-bound disk encryption (NBDE).
+
+Note that if any such option is present on the command line, QEMU user networking will be automatically enabled for the libguestfs appliance.
+
 =back
 
index 3f0429b27e472e95198796f2621c691c2dfa8fe9..9f074c55fe98244e1e55b678b596bf53ceca2eaf 100644 (file)
@@ -110,6 +110,38 @@ For an overview on the different ways to install packages, see L<virt-builder(1)
 
 Set the hostname of the guest to C<HOSTNAME>.  You can use a dotted hostname.domainname (FQDN) if you want.
 
+=item B<--inject-qemu-ga> METHOD (see C<customize> below)
+
+Inject the QEMU Guest Agent into a Windows guest.  The guest agent communicates with qemu through a socket in order to provide enhanced features (see L<qemu-ga(8)>).  This operation also injects a firstboot script so that the Guest Agent is installed when the guest boots.
+
+The parameter is the same as used by the I<--inject-virtio-win> operation.
+
+Note that to do a full conversion of a Windows guest from a foreign hypervisor like VMware (which involves many other operations)  you should use the L<virt-v2v(1)> tool instead of this.
+
+=item B<--inject-virtio-win> METHOD (see C<customize> below)
+
+Inject virtio-win drivers into a Windows guest.  These drivers add virtio accelerated drivers suitable when running on top of a hypervisor that supports virtio (such as qemu/KVM).  The operation also adjusts the Windows Registry so that the drivers are installed when the guest boots.
+
+The parameter can be one of:
+
+=over 4
+
+=item ISO
+
+The path to the ISO image containing the virtio-win drivers (eg. F</usr/share/virtio-win/virtio-win.iso>).
+
+=item DIR
+
+The directory containing the unpacked virtio-win drivers (eg. F</usr/share/virtio-win>).
+
+=item B<"osinfo">
+
+The literal string C<"osinfo"> means to use the libosinfo database to locate the drivers.  (See L<osinfo-query(1)>.
+
+=back
+
+Note that to do a full conversion of a Windows guest from a foreign hypervisor like VMware (which involves many other operations)  you should use the L<virt-v2v(1)> tool instead of this.
+
 =item B<--install> PKG,PKG..  (see C<customize> below)
 
 Install the named packages (a comma-separated list).  These are installed during the image build using the guest’s package manager (eg. apt, yum, etc.) and the host’s network connection.
@@ -150,6 +182,14 @@ Scrub C<builder.log> (log file from build commands) from the image after buildin
 
 See also: L</LOG FILE>.
 
+=item B<--no-selinux-relabel> (see C<customize> below)
+
+Do not attempt to correct the SELinux labels of files in the guest.
+
+In such guests that support SELinux, customization automatically relabels files so that they have the correct SELinux label.  (The relabeling is performed immediately, but if the operation fails, customization will instead touch F</.autorelabel> on the image to schedule a relabel operation for the next time the image boots.)  This option disables the automatic relabeling.
+
+The option is a no-op for guests that do not support SELinux.
+
 =item B<--password> USER:SELECTOR (see C<customize> below)
 
 Set the password for C<USER>.  (Note this option does I<not> create the user account).
@@ -240,11 +280,7 @@ It cannot delete directories, only regular files.
 
 =item B<--selinux-relabel> (see C<customize> below)
 
-Relabel files in the guest so that they have the correct SELinux label.
-
-This will attempt to relabel files immediately, but if the operation fails this will instead touch F</.autorelabel> on the image to schedule a relabel operation for the next time the image boots.
-
-You should only use this option for guests which support SELinux.
+This is a compatibility option that does nothing.
 
 =item B<--sm-attach> SELECTOR (see C<customize> below)
 
index 6d8f7b98d636840da5623f77eff2291ed7313934..979728a9cec89203500ab451ec7470b7d3de6089 100644 (file)
@@ -429,6 +429,12 @@ Linux においては以下のファイルが削除されます:
 
 =back
 
+=head2 B<lvm-system-devices> *
+
+Remove LVM2 system.devices file.
+
+On Linux guests, LVM2's scanning for physical volumes (PVs) may be restricted to those block devices whose WWIDs are listed in C</etc/lvm/devices/system.devices>.  When cloning VMs, WWIDs may change, breaking C<lvm pvscan>.  Remove C</etc/lvm/devices/system.devices>.
+
 =head2 B<lvm-uuids> *
 
 LVM2 の PV および VG の UUID を変更します。
index 95d72ad50edd0683013b3b22daf1a585f7775790..57d389389d20818beb4863610a45ffdbdbf6b813 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Podwrapper::Man 1.48.3 (Pod::Simple 3.43)
+.\" Automatically generated by Podwrapper::Man 1.50.0 (Pod::Simple 3.43)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -71,7 +71,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-alignment-scan 1"
-.TH virt-alignment-scan 1 "2023-01-11" "guestfs-tools-1.48.3" "Virtualization Support"
+.TH virt-alignment-scan 1 "2023-02-07" "guestfs-tools-1.50.0" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index 32f6dbc8587e846c1c1a3ad6fc3fdfd6fb561a22..92c59fce963e25f852ca4eb272bc21132d592a6e 100644 (file)
@@ -163,5 +163,5 @@ Cédric Bosdonnat L<mailto:cbosdonnat@suse.com>
 
 =head1 COPYRIGHT
 
-Copyright (C) 2016-2020 SUSE Inc.
+Copyright (C) 2016-2023 SUSE Inc.
 
index c64ca52f5577df4f360b8cf0bb46477ee04e68e2..c0c2b21f9e94403bbcf3375d267d967210e63deb 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Podwrapper::Man 1.48.3 (Pod::Simple 3.43)
+.\" Automatically generated by Podwrapper::Man 1.50.0 (Pod::Simple 3.43)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -71,7 +71,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-builder 1"
-.TH virt-builder 1 "2023-01-11" "guestfs-tools-1.48.3" "Virtualization Support"
+.TH virt-builder 1 "2023-02-07" "guestfs-tools-1.50.0" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -193,12 +193,6 @@ To update the installed packages to the latest version:
 .Vb 1
 \& virt\-builder debian\-7 \-\-update
 .Ve
-.PP
-For guests which use SELinux, like Fedora and Red Hat Enterprise Linux, you may need to do SELinux relabelling after installing or updating packages (see \*(L"\s-1SELINUX\*(R"\s0 below):
-.PP
-.Vb 1
-\& virt\-builder fedora\-27 \-\-update \-\-selinux\-relabel
-.Ve
 .SS "Customizing the installation"
 .IX Subsection "Customizing the installation"
 There are many options that let you customize the installation.  These include: \fI\-\-run\fR/\fI\-\-run\-command\fR, which run a shell script or command while the disk image is being generated and lets you add or edit files that go into the disk image.  \fI\-\-firstboot\fR/\fI\-\-firstboot\-command\fR, which let you add scripts/commands that are run the first time the guest boots. \fI\-\-edit\fR to edit files.  \fI\-\-upload\fR to upload files.
@@ -618,6 +612,34 @@ For an overview on the different ways to install packages, see \*(L"\s-1INSTALLI
 .IP "\fB\-\-hostname\fR \s-1HOSTNAME\s0" 4
 .IX Item "--hostname HOSTNAME"
 Set the hostname of the guest to \f(CW\*(C`HOSTNAME\*(C'\fR.  You can use a dotted hostname.domainname (\s-1FQDN\s0) if you want.
+.IP "\fB\-\-inject\-qemu\-ga\fR \s-1METHOD\s0" 4
+.IX Item "--inject-qemu-ga METHOD"
+Inject the \s-1QEMU\s0 Guest Agent into a Windows guest.  The guest agent communicates with qemu through a socket in order to provide enhanced features (see \fBqemu\-ga\fR\|(8)).  This operation also injects a firstboot script so that the Guest Agent is installed when the guest boots.
+.Sp
+The parameter is the same as used by the \fI\-\-inject\-virtio\-win\fR operation.
+.Sp
+Note that to do a full conversion of a Windows guest from a foreign hypervisor like VMware (which involves many other operations)  you should use the \fBvirt\-v2v\fR\|(1) tool instead of this.
+.IP "\fB\-\-inject\-virtio\-win\fR \s-1METHOD\s0" 4
+.IX Item "--inject-virtio-win METHOD"
+Inject virtio-win drivers into a Windows guest.  These drivers add virtio accelerated drivers suitable when running on top of a hypervisor that supports virtio (such as qemu/KVM).  The operation also adjusts the Windows Registry so that the drivers are installed when the guest boots.
+.Sp
+The parameter can be one of:
+.RS 4
+.IP "\s-1ISO\s0" 4
+.IX Item "ISO"
+The path to the \s-1ISO\s0 image containing the virtio-win drivers (eg. \fI/usr/share/virtio\-win/virtio\-win.iso\fR).
+.IP "\s-1DIR\s0" 4
+.IX Item "DIR"
+The directory containing the unpacked virtio-win drivers (eg. \fI/usr/share/virtio\-win\fR).
+.ie n .IP "\fB""osinfo""\fR" 4
+.el .IP "\fB``osinfo''\fR" 4
+.IX Item "osinfo"
+The literal string \f(CW"osinfo"\fR means to use the libosinfo database to locate the drivers.  (See \fBosinfo\-query\fR\|(1).
+.RE
+.RS 4
+.Sp
+Note that to do a full conversion of a Windows guest from a foreign hypervisor like VMware (which involves many other operations)  you should use the \fBvirt\-v2v\fR\|(1) tool instead of this.
+.RE
 .IP "\fB\-\-install\fR \s-1PKG,PKG..\s0" 4
 .IX Item "--install PKG,PKG.."
 Install the named packages (a comma-separated list).  These are installed during the image build using the guest’s package manager (eg. apt, yum, etc.) and the host’s network connection.
@@ -643,6 +665,13 @@ Wildcards cannot be used.
 Scrub \f(CW\*(C`builder.log\*(C'\fR (log file from build commands) from the image after building is complete.  If you don't want to reveal precisely how the image was built, use this option.
 .Sp
 See also: \*(L"\s-1LOG FILE\*(R"\s0.
+.IP "\fB\-\-no\-selinux\-relabel\fR" 4
+.IX Item "--no-selinux-relabel"
+Do not attempt to correct the SELinux labels of files in the guest.
+.Sp
+In such guests that support SELinux, customization automatically relabels files so that they have the correct SELinux label.  (The relabeling is performed immediately, but if the operation fails, customization will instead touch \fI/.autorelabel\fR on the image to schedule a relabel operation for the next time the image boots.)  This option disables the automatic relabeling.
+.Sp
+The option is a no-op for guests that do not support SELinux.
 .IP "\fB\-\-password\fR \s-1USER:SELECTOR\s0" 4
 .IX Item "--password USER:SELECTOR"
 Set the password for \f(CW\*(C`USER\*(C'\fR.  (Note this option does \fInot\fR create the user account).
@@ -699,11 +728,7 @@ It cannot delete directories, only regular files.
 .RE
 .IP "\fB\-\-selinux\-relabel\fR" 4
 .IX Item "--selinux-relabel"
-Relabel files in the guest so that they have the correct SELinux label.
-.Sp
-This will attempt to relabel files immediately, but if the operation fails this will instead touch \fI/.autorelabel\fR on the image to schedule a relabel operation for the next time the image boots.
-.Sp
-You should only use this option for guests which support SELinux.
+This is a compatibility option that does nothing.
 .IP "\fB\-\-sm\-attach\fR \s-1SELECTOR\s0" 4
 .IX Item "--sm-attach SELECTOR"
 Attach to a pool using \f(CW\*(C`subscription\-manager\*(C'\fR.
@@ -1073,7 +1098,7 @@ A new random seed is generated for the guest.
 .IP "\(bu" 4
 Guest customization is performed, in the order specified on the command line.
 .IP "\(bu" 4
-SELinux relabelling is done (\fI\-\-selinux\-relabel\fR).
+SELinux relabelling is done unless disabled with \fI\-\-no\-selinux\-relabel\fR.
 .SS "\s-1IMPORTING THE DISK IMAGE\s0"
 .IX Subsection "IMPORTING THE DISK IMAGE"
 \fIImporting into libvirt\fR
@@ -1148,15 +1173,14 @@ To enable the Puppet agent in a guest, install the package, point the configurat
 .PP
 A typical virt-builder command would be:
 .PP
-.Vb 8
+.Vb 7
 \& virt\-builder fedora\-27 \e
 \&   \-\-hostname client.example.com \e
 \&   \-\-update \e
 \&   \-\-install puppet \e
 \&   \-\-append\-line \*(Aq/etc/puppet/puppet.conf:[agent]\*(Aq \e
 \&   \-\-append\-line \*(Aq/etc/puppet/puppet.conf:server = puppetmaster.example.com/\*(Aq \e
-\&   \-\-run\-command \*(Aqsystemctl enable puppet\*(Aq \e
-\&   \-\-selinux\-relabel
+\&   \-\-run\-command \*(Aqsystemctl enable puppet\*(Aq
 .Ve
 .PP
 The precise instructions vary according to the Linux distro.  For further information see: https://docs.puppet.com/puppet/latest/install_pre.html
@@ -1672,18 +1696,16 @@ Virt-builder uses an internal implementation of pxzcat (parallel xzcat) if liblz
 Guests which use SELinux (such as Fedora and Red Hat Enterprise Linux) require that each file has a correct SELinux label.
 .PP
 Virt-builder does not know how to give new files a label, so there are two possible strategies it can use to ensure correct labelling:
-.IP "Using \fI\-\-selinux\-relabel\fR" 4
-.IX Item "Using --selinux-relabel"
+.IP "Automatic relabeling" 4
+.IX Item "Automatic relabeling"
 This runs \fBsetfiles\fR\|(8) just before finalizing the guest, which sets SELinux labels correctly in the disk image.
 .Sp
 This is the recommended method.
-.IP "\fI\-\-touch\fR \fI/.autorelabel\fR" 4
-.IX Item "--touch /.autorelabel"
+.IP "Using \fI\-\-no\-selinux\-relabel\fR \fI\-\-touch\fR \fI/.autorelabel\fR" 4
+.IX Item "Using --no-selinux-relabel --touch /.autorelabel"
 Guest templates may already contain a file called \fI/.autorelabel\fR or you may touch it.
 .Sp
 For guests that use SELinux, this causes \fBrestorecon\fR\|(8) to run at first boot.  Guests will reboot themselves once the first time you use them, which is normal and harmless.
-.PP
-Please note that if your guest uses SELinux, and you are doing operations on it which might create new files or change existing ones, you are recommended to use \fI\-\-selinux\-relabel\fR.  This will help in making sure that files have the right SELinux labels.
 .SH "マシン可読な出力"
 .IX Header "マシン可読な出力"
 The \fI\-\-machine\-readable\fR option can be used to make the output more machine friendly, which is useful when calling virt-builder from other programs, GUIs etc.
index 12360a021a381eeaf3b03618179f6190dd35262b..0deaaef41fb2abc533d915f3d8fffcef01597d41 100644 (file)
@@ -106,10 +106,6 @@ To update the installed packages to the latest version:
 
  virt-builder debian-7 --update
 
-For guests which use SELinux, like Fedora and Red Hat Enterprise Linux, you may need to do SELinux relabelling after installing or updating packages (see L</SELINUX> below):
-
- virt-builder fedora-27 --update --selinux-relabel
-
 =head2 Customizing the installation
 
 There are many options that let you customize the installation.  These include: I<--run>/I<--run-command>, which run a shell script or command while the disk image is being generated and lets you add or edit files that go into the disk image.  I<--firstboot>/I<--firstboot-command>, which let you add scripts/commands that are run the first time the guest boots. I<--edit> to edit files.  I<--upload> to upload files.
@@ -762,7 +758,7 @@ Guest customization is performed, in the order specified on the command line.
 
 =item *
 
-SELinux relabelling is done (I<--selinux-relabel>).
+SELinux relabelling is done unless disabled with I<--no-selinux-relabel>.
 
 =back
 
@@ -843,8 +839,7 @@ A typical virt-builder command would be:
    --install puppet \
    --append-line '/etc/puppet/puppet.conf:[agent]' \
    --append-line '/etc/puppet/puppet.conf:server = puppetmaster.example.com/' \
-   --run-command 'systemctl enable puppet' \
-   --selinux-relabel
+   --run-command 'systemctl enable puppet'
 
 The precise instructions vary according to the Linux distro.  For further information see: L<https://docs.puppet.com/puppet/latest/install_pre.html>
 
@@ -1347,13 +1342,13 @@ Virt-builder does not know how to give new files a label, so there are two possi
 
 =over 4
 
-=item Using I<--selinux-relabel>
+=item Automatic relabeling
 
 This runs L<setfiles(8)> just before finalizing the guest, which sets SELinux labels correctly in the disk image.
 
 This is the recommended method.
 
-=item I<--touch> F</.autorelabel>
+=item Using I<--no-selinux-relabel> I<--touch> F</.autorelabel>
 
 Guest templates may already contain a file called F</.autorelabel> or you may touch it.
 
@@ -1361,8 +1356,6 @@ For guests that use SELinux, this causes L<restorecon(8)> to run at first boot.
 
 =back
 
-Please note that if your guest uses SELinux, and you are doing operations on it which might create new files or change existing ones, you are recommended to use I<--selinux-relabel>.  This will help in making sure that files have the right SELinux labels.
-
 =head1 マシン可読な出力
 
 The I<--machine-readable> option can be used to make the output more machine friendly, which is useful when calling virt-builder from other programs, GUIs etc.
index 806c52fb7ce92fa80970556788cd79774290c043..5c3706be0c76e1079f80de2de72fc17c2156a882 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Podwrapper::Man 1.48.3 (Pod::Simple 3.43)
+.\" Automatically generated by Podwrapper::Man 1.50.0 (Pod::Simple 3.43)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -71,7 +71,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-cat 1"
-.TH virt-cat 1 "2023-01-11" "guestfs-tools-1.48.3" "Virtualization Support"
+.TH virt-cat 1 "2023-02-07" "guestfs-tools-1.50.0" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -218,6 +218,15 @@ Use the specified \f(CW\*(C`KEY_STRING\*(C'\fR as passphrase.
 .el .IP "\fB\-\-key\fR \f(CWID\fR:file:FILENAME" 4
 .IX Item "--key ID:file:FILENAME"
 Read the passphrase from \fI\s-1FILENAME\s0\fR.
+.ie n .IP "\fB\-\-key\fR ""ID"":clevis" 4
+.el .IP "\fB\-\-key\fR \f(CWID\fR:clevis" 4
+.IX Item "--key ID:clevis"
+Attempt passphrase-less unlocking for \f(CW\*(C`ID\*(C'\fR with Clevis, over the
+network.  Please refer to \*(L"\s-1ENCRYPTED DISKS\*(R"\s0 in \fBguestfs\fR\|(3) for more
+information on network-bound disk encryption (\s-1NBDE\s0).
+.Sp
+Note that if any such option is present on the command line, \s-1QEMU\s0 user
+networking will be automatically enabled for the libguestfs appliance.
 .RE
 .RS 4
 .RE
@@ -337,7 +346,7 @@ where \fIdisk.img\fR is the disk image, \fI/dev/sda1\fR is the filesystem within
 Richard W.M. Jones http://people.redhat.com/~rjones/
 .SH "COPYRIGHT"
 .IX Header "COPYRIGHT"
-Copyright (C) 2010\-2012 Red Hat Inc.
+Copyright (C) 2010\-2023 Red Hat Inc.
 .SH "LICENSE"
 .IX Header "LICENSE"
 .SH "BUGS"
index e74e6e7a60fbe59b16e50c0d18518c46733670fa..5e27940d20c0ebf14264bc657db206ba90aab714 100644 (file)
@@ -231,5 +231,5 @@ Richard W.M. Jones L<http://people.redhat.com/~rjones/>
 
 =head1 COPYRIGHT
 
-Copyright (C) 2010-2012 Red Hat Inc.
+Copyright (C) 2010-2023 Red Hat Inc.
 
index 4910081b5a5c989d3284cd3465812f7ee4bdfb59..ccf3c154afb09bbb15b66dffe34ee85682c8a703 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Podwrapper::Man 1.48.3 (Pod::Simple 3.43)
+.\" Automatically generated by Podwrapper::Man 1.50.0 (Pod::Simple 3.43)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -71,7 +71,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-customize 1"
-.TH virt-customize 1 "2023-01-11" "guestfs-tools-1.48.3" "Virtualization Support"
+.TH virt-customize 1 "2023-02-07" "guestfs-tools-1.50.0" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -209,6 +209,15 @@ Use the specified \f(CW\*(C`KEY_STRING\*(C'\fR as passphrase.
 .el .IP "\fB\-\-key\fR \f(CWID\fR:file:FILENAME" 4
 .IX Item "--key ID:file:FILENAME"
 Read the passphrase from \fI\s-1FILENAME\s0\fR.
+.ie n .IP "\fB\-\-key\fR ""ID"":clevis" 4
+.el .IP "\fB\-\-key\fR \f(CWID\fR:clevis" 4
+.IX Item "--key ID:clevis"
+Attempt passphrase-less unlocking for \f(CW\*(C`ID\*(C'\fR with Clevis, over the
+network.  Please refer to \*(L"\s-1ENCRYPTED DISKS\*(R"\s0 in \fBguestfs\fR\|(3) for more
+information on network-bound disk encryption (\s-1NBDE\s0).
+.Sp
+Note that if any such option is present on the command line, \s-1QEMU\s0 user
+networking will be automatically enabled for the libguestfs appliance.
 .RE
 .RS 4
 .RE
@@ -407,6 +416,34 @@ For an overview on the different ways to install packages, see \*(L"\s-1INSTALLI
 .IP "\fB\-\-hostname\fR \s-1HOSTNAME\s0" 4
 .IX Item "--hostname HOSTNAME"
 Set the hostname of the guest to \f(CW\*(C`HOSTNAME\*(C'\fR.  You can use a dotted hostname.domainname (\s-1FQDN\s0) if you want.
+.IP "\fB\-\-inject\-qemu\-ga\fR \s-1METHOD\s0" 4
+.IX Item "--inject-qemu-ga METHOD"
+Inject the \s-1QEMU\s0 Guest Agent into a Windows guest.  The guest agent communicates with qemu through a socket in order to provide enhanced features (see \fBqemu\-ga\fR\|(8)).  This operation also injects a firstboot script so that the Guest Agent is installed when the guest boots.
+.Sp
+The parameter is the same as used by the \fI\-\-inject\-virtio\-win\fR operation.
+.Sp
+Note that to do a full conversion of a Windows guest from a foreign hypervisor like VMware (which involves many other operations)  you should use the \fBvirt\-v2v\fR\|(1) tool instead of this.
+.IP "\fB\-\-inject\-virtio\-win\fR \s-1METHOD\s0" 4
+.IX Item "--inject-virtio-win METHOD"
+Inject virtio-win drivers into a Windows guest.  These drivers add virtio accelerated drivers suitable when running on top of a hypervisor that supports virtio (such as qemu/KVM).  The operation also adjusts the Windows Registry so that the drivers are installed when the guest boots.
+.Sp
+The parameter can be one of:
+.RS 4
+.IP "\s-1ISO\s0" 4
+.IX Item "ISO"
+The path to the \s-1ISO\s0 image containing the virtio-win drivers (eg. \fI/usr/share/virtio\-win/virtio\-win.iso\fR).
+.IP "\s-1DIR\s0" 4
+.IX Item "DIR"
+The directory containing the unpacked virtio-win drivers (eg. \fI/usr/share/virtio\-win\fR).
+.ie n .IP "\fB""osinfo""\fR" 4
+.el .IP "\fB``osinfo''\fR" 4
+.IX Item "osinfo"
+The literal string \f(CW"osinfo"\fR means to use the libosinfo database to locate the drivers.  (See \fBosinfo\-query\fR\|(1).
+.RE
+.RS 4
+.Sp
+Note that to do a full conversion of a Windows guest from a foreign hypervisor like VMware (which involves many other operations)  you should use the \fBvirt\-v2v\fR\|(1) tool instead of this.
+.RE
 .IP "\fB\-\-install\fR \s-1PKG,PKG..\s0" 4
 .IX Item "--install PKG,PKG.."
 Install the named packages (a comma-separated list).  These are installed during the image build using the guest’s package manager (eg. apt, yum, etc.) and the host’s network connection.
@@ -432,6 +469,13 @@ Wildcards cannot be used.
 Scrub \f(CW\*(C`builder.log\*(C'\fR (log file from build commands) from the image after building is complete.  If you don't want to reveal precisely how the image was built, use this option.
 .Sp
 See also: \*(L"\s-1LOG FILE\*(R"\s0.
+.IP "\fB\-\-no\-selinux\-relabel\fR" 4
+.IX Item "--no-selinux-relabel"
+Do not attempt to correct the SELinux labels of files in the guest.
+.Sp
+In such guests that support SELinux, customization automatically relabels files so that they have the correct SELinux label.  (The relabeling is performed immediately, but if the operation fails, customization will instead touch \fI/.autorelabel\fR on the image to schedule a relabel operation for the next time the image boots.)  This option disables the automatic relabeling.
+.Sp
+The option is a no-op for guests that do not support SELinux.
 .IP "\fB\-\-password\fR \s-1USER:SELECTOR\s0" 4
 .IX Item "--password USER:SELECTOR"
 Set the password for \f(CW\*(C`USER\*(C'\fR.  (Note this option does \fInot\fR create the user account).
@@ -488,11 +532,7 @@ It cannot delete directories, only regular files.
 .RE
 .IP "\fB\-\-selinux\-relabel\fR" 4
 .IX Item "--selinux-relabel"
-Relabel files in the guest so that they have the correct SELinux label.
-.Sp
-This will attempt to relabel files immediately, but if the operation fails this will instead touch \fI/.autorelabel\fR on the image to schedule a relabel operation for the next time the image boots.
-.Sp
-You should only use this option for guests which support SELinux.
+This is a compatibility option that does nothing.
 .IP "\fB\-\-sm\-attach\fR \s-1SELECTOR\s0" 4
 .IX Item "--sm-attach SELECTOR"
 Attach to a pool using \f(CW\*(C`subscription\-manager\*(C'\fR.
@@ -595,7 +635,7 @@ This is a Windows binary shipped with \s-1SUSE VMDP,\s0 used to install a \*(L"f
 Richard W.M. Jones http://people.redhat.com/~rjones/
 .SH "COPYRIGHT"
 .IX Header "COPYRIGHT"
-Copyright (C) 2011\-2020 Red Hat Inc.
+Copyright (C) 2011\-2023 Red Hat Inc.
 .SH "LICENSE"
 .IX Header "LICENSE"
 This program is free software; you can redistribute it and/or modify it
index a017be174a0ed5ea1aff0c60a25c1ed2986e2818..bb78840d05c13461aba5bb2ae8792fb0187a9f8a 100644 (file)
@@ -249,5 +249,5 @@ Richard W.M. Jones L<http://people.redhat.com/~rjones/>
 
 =head1 COPYRIGHT
 
-Copyright (C) 2011-2020 Red Hat Inc.
+Copyright (C) 2011-2023 Red Hat Inc.
 
index dd92db54edcf424bac720f648a40cce128428621..613f9c040987a2e991a518f4fa8c96145244476b 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Podwrapper::Man 1.48.3 (Pod::Simple 3.43)
+.\" Automatically generated by Podwrapper::Man 1.50.0 (Pod::Simple 3.43)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -71,7 +71,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-df 1"
-.TH virt-df 1 "2023-01-11" "guestfs-tools-1.48.3" "Virtualization Support"
+.TH virt-df 1 "2023-02-07" "guestfs-tools-1.50.0" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -309,13 +309,13 @@ Most spreadsheets and databases can import \s-1CSV\s0 directly.
 このプログラムは、成功すると 0 を、エラーがあると 0 以外を返します。
 .SH "関連項目"
 .IX Header "関連項目"
-\&\fBdf\fR\|(1), \fBguestfs\fR\|(3), \fBguestfish\fR\|(1), \fBvirt\-filesystems\fR\|(1), http://libguestfs.org/.
+\&\fBdf\fR\|(1), \fBguestfs\fR\|(3), \fBguestfish\fR\|(1), \fBvirt\-drivers\fR\|(1), \fBvirt\-filesystems\fR\|(1), http://libguestfs.org/.
 .SH "著者"
 .IX Header "著者"
 Richard W.M. Jones http://people.redhat.com/~rjones/
 .SH "COPYRIGHT"
 .IX Header "COPYRIGHT"
-Copyright (C) 2009\-2020 Red Hat Inc.
+Copyright (C) 2009\-2023 Red Hat Inc.
 .SH "LICENSE"
 .IX Header "LICENSE"
 .SH "BUGS"
index 34fb10534024c8ce8d3b28de00a83ee297ba59b4..417df9b41675ddedb34a9c07cfa23e05030da9fd 100644 (file)
@@ -211,7 +211,7 @@ Most spreadsheets and databases can import CSV directly.
 
 =head1 関連項目
 
-L<df(1)>, L<guestfs(3)>, L<guestfish(1)>, L<virt-filesystems(1)>, L<http://libguestfs.org/>.
+L<df(1)>, L<guestfs(3)>, L<guestfish(1)>, L<virt-drivers(1)>, L<virt-filesystems(1)>, L<http://libguestfs.org/>.
 
 =head1 著者
 
@@ -219,5 +219,5 @@ Richard W.M. Jones L<http://people.redhat.com/~rjones/>
 
 =head1 COPYRIGHT
 
-Copyright (C) 2009-2020 Red Hat Inc.
+Copyright (C) 2009-2023 Red Hat Inc.
 
index a30994df15bc1b93b339d6cf20dec03a1428c6e6..5eed0175a770c2052176e09acae27d88a229db87 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Podwrapper::Man 1.48.3 (Pod::Simple 3.43)
+.\" Automatically generated by Podwrapper::Man 1.50.0 (Pod::Simple 3.43)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -71,7 +71,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-dib 1"
-.TH virt-dib 1 "2023-01-11" "guestfs-tools-1.48.3" "Virtualization Support"
+.TH virt-dib 1 "2023-02-07" "guestfs-tools-1.50.0" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index 90da57fe2f363cd8fa6ea5711fec0335591f4a7c..65fa8fc8a4b79db40d66ba6db9a8cc4702be3c03 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Podwrapper::Man 1.48.3 (Pod::Simple 3.43)
+.\" Automatically generated by Podwrapper::Man 1.50.0 (Pod::Simple 3.43)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -71,7 +71,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-diff 1"
-.TH virt-diff 1 "2023-01-11" "guestfs-tools-1.48.3" "Virtualization Support"
+.TH virt-diff 1 "2023-02-07" "guestfs-tools-1.50.0" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -237,6 +237,15 @@ Use the specified \f(CW\*(C`KEY_STRING\*(C'\fR as passphrase.
 .el .IP "\fB\-\-key\fR \f(CWID\fR:file:FILENAME" 4
 .IX Item "--key ID:file:FILENAME"
 Read the passphrase from \fI\s-1FILENAME\s0\fR.
+.ie n .IP "\fB\-\-key\fR ""ID"":clevis" 4
+.el .IP "\fB\-\-key\fR \f(CWID\fR:clevis" 4
+.IX Item "--key ID:clevis"
+Attempt passphrase-less unlocking for \f(CW\*(C`ID\*(C'\fR with Clevis, over the
+network.  Please refer to \*(L"\s-1ENCRYPTED DISKS\*(R"\s0 in \fBguestfs\fR\|(3) for more
+information on network-bound disk encryption (\s-1NBDE\s0).
+.Sp
+Note that if any such option is present on the command line, \s-1QEMU\s0 user
+networking will be automatically enabled for the libguestfs appliance.
 .RE
 .RS 4
 .RE
@@ -317,7 +326,7 @@ Most spreadsheets and databases can import \s-1CSV\s0 directly.
 Richard W.M. Jones http://people.redhat.com/~rjones/
 .SH "COPYRIGHT"
 .IX Header "COPYRIGHT"
-Copyright (C) 2009\-2020 Red Hat Inc.
+Copyright (C) 2009\-2023 Red Hat Inc.
 .SH "LICENSE"
 .IX Header "LICENSE"
 .SH "BUGS"
index e6e0bd19b515cc246573e3573aaccc5f01e12331..f0cdd9c6681f06693ad5be62e60a5c52cfe50911 100644 (file)
@@ -212,5 +212,5 @@ Richard W.M. Jones L<http://people.redhat.com/~rjones/>
 
 =head1 COPYRIGHT
 
-Copyright (C) 2009-2020 Red Hat Inc.
+Copyright (C) 2009-2023 Red Hat Inc.
 
diff --git a/po-docs/ja/virt-drivers.pod b/po-docs/ja/virt-drivers.pod
new file mode 100644 (file)
index 0000000..054cc18
--- /dev/null
@@ -0,0 +1,205 @@
+
+=head1 名前
+
+virt-drivers - Detect bootloader, kernel and drivers inside guest
+
+=head1 書式
+
+ virt-drivers [--options] -d domname
+
+ virt-drivers [--options] -a disk.img
+
+=head1 説明
+
+This tool can detect the bootloader, kernel and drivers inside some guests from only the disk image.  It can detect, for example, whether a disk image needs BIOS or UEFI to boot, and whether it supports virtio or requires slower emulated devices.
+
+=head2 Notes
+
+Normally you should distribute hypervisor metadata (eg. libvirt XML or OVF) alongside disk images to tell the hypervisor how to boot them.  This tool is used when this metadata has not been provided.  Work with the supplier of the disk image to get them to provide proper metadata.
+
+=head1 XML フォーマット
+
+The output is an XML document.  At the top level it lists the operating systems found (the same as L<virt-inspector(1)>):
+
+ <operatingsystems>
+   <operatingsystem>
+     <root>/dev/sda2</root>
+     <name>linux</name>
+     <arch>x86_64</arch>
+     <distro>fedora</distro>
+     ...
+   </operatingsystem>
+   <operatingsystem>
+     <root>/dev/sdb1</root>
+     ...
+   </operatingsystem>
+ </operatingsystems>
+
+=head2 E<lt>firmwareE<gt>
+
+The E<lt>firmwareE<gt> element lists the firmware which is required to boot the guest.  For UEFI it will additionally show the EFI system partition ("ESP").  Guests may support multiple boot firmwares.  For example this guest is detected as using UEFI boot, and the UEFI ESP is the first partition of the first disk:
+
+ <operatingsystems>
+   <firmware type='uefi'>/dev/sda1</firmware>
+   <operatingsystem>
+     ...
+
+=head2 E<lt>bootloaderE<gt> and E<lt>kernelE<gt>
+
+The E<lt>bootloaderE<gt> element shows the bootloader found in the Linux guest.  If known, this may contain information about what Linux kernels are provided.  For example:
+
+ <operatingsystems>
+   <firmware type='bios'/>
+   <operatingsystem>
+     <root>/dev/sda2</root>
+     <name>linux</name>
+     ...
+     <bootloader type='grub2' config='/boot/grub2/grub.cfg'>
+       <kernel>
+         <name>kernel</name>
+         <version>6.1.0-0.rc6.46.fc38.x86_64</version>
+         <vmlinuz>/boot/vmlinuz-6.1.0-0.rc6.46.fc38.x86_64</vmlinuz>
+         <modules>
+           ...
+         </modules>
+         <supports_virtio_blk/>
+         <supports_virtio_net/>
+         ...
+       </kernel>
+     </bootloader>
+
+Many more fields are usually available for Linux guests, including a complete list of kernel modules and information about support for virtio. For a complete example see: L<https://github.com/rwmjones/guestfs-tools/tree/master/drivers>
+
+=head2 E<lt>driversE<gt>
+
+The E<lt>driversE<gt> element lists information about drivers found in Windows guests:
+
+ <operatingsystems>
+   <firmware type='bios'/>
+   <operatingsystem>
+     <root>/dev/sda2</root>
+     <name>windows</name>
+     ...
+     <drivers>
+       <driver>
+         <name>scsidev</name>
+         <pci vendor='1077' device='1216' subsystem='8471101E'/>
+         <pci vendor='1077' device='1216' subsystem='8493101E'/>
+       </driver>
+       ...
+     </drivers>
+
+The driver name (eg. C<scsidev>) corresponds to the Windows driver F<.INF> file (eg. F<scsidev.inf>).  The list of PCI, USB etc devices are the matching devices which would cause this driver to load at boot.
+
+=head1 オプション
+
+=over 4
+
+=item B<--help>
+
+ヘルプを表示します。
+
+=item B<-a> file
+
+=item B<--add> file
+
+仮想マシンからディスクイメージの I<file> を追加します。
+
+ディスクイメージの形式は自動的に検出されます。強制的に特定の形式を使用するには I<--format> オプションを使用します。
+
+=item B<-a> URI
+
+=item B<--add> URI
+
+Add a remote disk.  The URI format is compatible with guestfish.  See L<guestfish(1)/ADDING REMOTE STORAGE>.
+
+=item B<--blocksize> B<512>
+
+=item B<--blocksize> B<4096>
+
+This parameter sets the sector size of the disk image added with I<-a> option and is ignored for libvirt guest added with I<-d> option.  See also L<guestfs(3)/guestfs_add_drive_opts>.
+
+=item B<--colors>
+
+=item B<--colours>
+
+Use ANSI colour sequences to colourize messages.  This is the default when the output is a tty.  If the output of the program is redirected to a file, ANSI colour sequences are disabled unless you use this option.
+
+=item B<-c> URI
+
+=item B<--connect> URI
+
+libvirt を使用していると、指定された I<URI> に接続します。  省略すると、デフォルトの libvirt ハイパーバイザーに接続します。
+
+ゲストのブロックデバイスを直接指定していると((I<-a>))、libvirt は何も使用されません。
+
+=item B<-d> guest
+
+=item B<--domain> guest
+
+名前付きの libvirt 仮想マシンからすべてのディスクを追加します。  名前の代わりに仮想マシンの UUID を使用できます。
+
+=item B<--echo-keys>
+
+When prompting for keys and passphrases, virt-get-kernel normally turns echoing off so you cannot see what you are typing.  If you are not worried about Tempest attacks and there is no one else in the room you can specify this flag to see what you are typing.
+
+=item B<--format> raw|qcow2|..
+
+=item B<--format> auto
+
+The default for the I<-a> option is to auto-detect the format of the disk image.  Using this forces the disk format for the I<-a> option on the command line.
+
+仮想マシンのディスクイメージが信頼できない raw 形式である場合、 ディスク形式を指定するためにこのオプションを使用すべきです。 これにより、悪意のある仮想マシンにより起こり得る セキュリティ問題を回避できます (CVE-2010-3851)。
+
+__INCLUDE:key-option.pod__
+
+__INCLUDE:keys-from-stdin-option.pod__
+
+=item B<-q>
+
+=item B<--quiet>
+
+Don’t print ordinary progress messages.
+
+=item B<-v>
+
+=item B<--verbose>
+
+デバッグ用の冗長なメッセージを有効にします。
+
+=item B<-V>
+
+=item B<--version>
+
+バージョン番号を表示して、終了します。
+
+=item B<--wrap>
+
+Wrap error, warning, and informative messages.  This is the default when the output is a tty.  If the output of the program is redirected to a file, wrapping is disabled unless you use this option.
+
+=item B<-x>
+
+libguestfs API 呼び出しのトレースを有効にします。
+
+=back
+
+=head1 環境変数
+
+For other environment variables which affect all libguestfs programs, see L<guestfs(3)/ENVIRONMENT VARIABLES>.
+
+=head1 終了ステータス
+
+このプログラムは、成功すると 0 を、エラーがあると 0 以外を返します。
+
+=head1 関連項目
+
+L<guestfs(3)>, L<guestfish(1)>, L<guestmount(1)>, L<virt-get-kernel(1)>, L<virt-inspector(1)>, L<virt-v2v(1)>, L<http://libguestfs.org/>.
+
+=head1 著者
+
+Richard W.M. Jones L<http://people.redhat.com/~rjones/>
+
+=head1 COPYRIGHT
+
+Copyright (C) 2009-2023 Red Hat Inc.
+
index 53ca88505ec3a938caf8ebf0fe6bb69d5509bba7..1c10c5da0d65af45f5a56499eb61b8e7764c8489 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Podwrapper::Man 1.48.3 (Pod::Simple 3.43)
+.\" Automatically generated by Podwrapper::Man 1.50.0 (Pod::Simple 3.43)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -71,7 +71,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-edit 1"
-.TH virt-edit 1 "2023-01-11" "guestfs-tools-1.48.3" "Virtualization Support"
+.TH virt-edit 1 "2023-02-07" "guestfs-tools-1.50.0" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -246,6 +246,15 @@ Use the specified \f(CW\*(C`KEY_STRING\*(C'\fR as passphrase.
 .el .IP "\fB\-\-key\fR \f(CWID\fR:file:FILENAME" 4
 .IX Item "--key ID:file:FILENAME"
 Read the passphrase from \fI\s-1FILENAME\s0\fR.
+.ie n .IP "\fB\-\-key\fR ""ID"":clevis" 4
+.el .IP "\fB\-\-key\fR \f(CWID\fR:clevis" 4
+.IX Item "--key ID:clevis"
+Attempt passphrase-less unlocking for \f(CW\*(C`ID\*(C'\fR with Clevis, over the
+network.  Please refer to \*(L"\s-1ENCRYPTED DISKS\*(R"\s0 in \fBguestfs\fR\|(3) for more
+information on network-bound disk encryption (\s-1NBDE\s0).
+.Sp
+Note that if any such option is present on the command line, \s-1QEMU\s0 user
+networking will be automatically enabled for the libguestfs appliance.
 .RE
 .RS 4
 .RE
@@ -423,7 +432,7 @@ where \fIdisk.img\fR is the disk image, \fI/dev/sda1\fR is the filesystem within
 Richard W.M. Jones http://people.redhat.com/~rjones/
 .SH "COPYRIGHT"
 .IX Header "COPYRIGHT"
-Copyright (C) 2009\-2020 Red Hat Inc.
+Copyright (C) 2009\-2023 Red Hat Inc.
 .SH "LICENSE"
 .IX Header "LICENSE"
 .SH "BUGS"
index 076b13bd962ee1bc94a6b9d8cdaf319b55773f53..a0108bf8b0812bc080921acb267983fedaf9f5f0 100644 (file)
@@ -307,5 +307,5 @@ Richard W.M. Jones L<http://people.redhat.com/~rjones/>
 
 =head1 COPYRIGHT
 
-Copyright (C) 2009-2020 Red Hat Inc.
+Copyright (C) 2009-2023 Red Hat Inc.
 
index fca1e7d14b11d250d4cb35f7b81f4b31fbf6c4f1..c4c1553f070bd567c003596596778a1ece9aae98 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Podwrapper::Man 1.48.3 (Pod::Simple 3.43)
+.\" Automatically generated by Podwrapper::Man 1.50.0 (Pod::Simple 3.43)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -71,7 +71,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-filesystems 1"
-.TH virt-filesystems 1 "2023-01-11" "guestfs-tools-1.48.3" "Virtualization Support"
+.TH virt-filesystems 1 "2023-02-07" "guestfs-tools-1.50.0" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -413,13 +413,13 @@ Most spreadsheets and databases can import \s-1CSV\s0 directly.
 このプログラムは、成功すると 0 を、エラーがあると 0 以外を返します。
 .SH "関連項目"
 .IX Header "関連項目"
-\&\fBguestfs\fR\|(3), \fBguestfish\fR\|(1), \fBvirt\-cat\fR\|(1), \fBvirt\-df\fR\|(1), \fBvirt\-list\-filesystems\fR\|(1), \fBvirt\-list\-partitions\fR\|(1), \fBcsvtool\fR\|(1), http://libguestfs.org/.
+\&\fBguestfs\fR\|(3), \fBguestfish\fR\|(1), \fBvirt\-cat\fR\|(1), \fBvirt\-df\fR\|(1), \fBvirt\-drivers\fR\|(1), \fBvirt\-list\-filesystems\fR\|(1), \fBvirt\-list\-partitions\fR\|(1), \fBcsvtool\fR\|(1), http://libguestfs.org/.
 .SH "著者"
 .IX Header "著者"
 Richard W.M. Jones http://people.redhat.com/~rjones/
 .SH "COPYRIGHT"
 .IX Header "COPYRIGHT"
-Copyright (C) 2010\-2012 Red Hat Inc.
+Copyright (C) 2010\-2023 Red Hat Inc.
 .SH "LICENSE"
 .IX Header "LICENSE"
 .SH "BUGS"
index fa200c8c1908dde64d4fce8073d5cf925626d78d..be5da0cf2016edd6ea002e06cacc011c54f92169 100644 (file)
@@ -313,7 +313,7 @@ Most spreadsheets and databases can import CSV directly.
 
 =head1 関連項目
 
-L<guestfs(3)>, L<guestfish(1)>, L<virt-cat(1)>, L<virt-df(1)>, L<virt-list-filesystems(1)>, L<virt-list-partitions(1)>, L<csvtool(1)>, L<http://libguestfs.org/>.
+L<guestfs(3)>, L<guestfish(1)>, L<virt-cat(1)>, L<virt-df(1)>, L<virt-drivers(1)>, L<virt-list-filesystems(1)>, L<virt-list-partitions(1)>, L<csvtool(1)>, L<http://libguestfs.org/>.
 
 =head1 著者
 
@@ -321,5 +321,5 @@ Richard W.M. Jones L<http://people.redhat.com/~rjones/>
 
 =head1 COPYRIGHT
 
-Copyright (C) 2010-2012 Red Hat Inc.
+Copyright (C) 2010-2023 Red Hat Inc.
 
index 209c73f8410cbacf83619a235aca11015ff5ffed..4e6c1b06f5c35d4bff3fa157dc2132c34ea4856b 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Podwrapper::Man 1.48.3 (Pod::Simple 3.43)
+.\" Automatically generated by Podwrapper::Man 1.50.0 (Pod::Simple 3.43)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -71,7 +71,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-format 1"
-.TH virt-format 1 "2023-01-11" "guestfs-tools-1.48.3" "Virtualization Support"
+.TH virt-format 1 "2023-02-07" "guestfs-tools-1.50.0" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index be20b98cb593004bfd3113e903636493bedfaf75..07df4e7772a4025b1dbfd923095ac9090b303c35 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Podwrapper::Man 1.48.3 (Pod::Simple 3.43)
+.\" Automatically generated by Podwrapper::Man 1.50.0 (Pod::Simple 3.43)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -71,7 +71,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-get-kernel 1"
-.TH virt-get-kernel 1 "2023-01-11" "guestfs-tools-1.48.3" "Virtualization Support"
+.TH virt-get-kernel 1 "2023-02-07" "guestfs-tools-1.50.0" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -88,7 +88,7 @@ virt-get-kernel \- Extract kernel and ramdisk from guests
 .Ve
 .SH "説明"
 .IX Header "説明"
-This option extracts the kernel and initramfs from a guest.
+This program extracts the kernel and initramfs from a guest.
 .PP
 The format of the disk image is automatically detected unless you specify it by using the \fI\-\-format\fR option.
 .PP
@@ -170,6 +170,15 @@ Use the specified \f(CW\*(C`KEY_STRING\*(C'\fR as passphrase.
 .el .IP "\fB\-\-key\fR \f(CWID\fR:file:FILENAME" 4
 .IX Item "--key ID:file:FILENAME"
 Read the passphrase from \fI\s-1FILENAME\s0\fR.
+.ie n .IP "\fB\-\-key\fR ""ID"":clevis" 4
+.el .IP "\fB\-\-key\fR \f(CWID\fR:clevis" 4
+.IX Item "--key ID:clevis"
+Attempt passphrase-less unlocking for \f(CW\*(C`ID\*(C'\fR with Clevis, over the
+network.  Please refer to \*(L"\s-1ENCRYPTED DISKS\*(R"\s0 in \fBguestfs\fR\|(3) for more
+information on network-bound disk encryption (\s-1NBDE\s0).
+.Sp
+Note that if any such option is present on the command line, \s-1QEMU\s0 user
+networking will be automatically enabled for the libguestfs appliance.
 .RE
 .RS 4
 .RE
@@ -259,13 +268,13 @@ For other environment variables which affect all libguestfs programs, see \*(L"\
 このプログラムは、成功すると 0 を、エラーがあると 0 以外を返します。
 .SH "関連項目"
 .IX Header "関連項目"
-\&\fBguestfs\fR\|(3), \fBguestfish\fR\|(1), \fBguestmount\fR\|(1), \fBvirt\-copy\-out\fR\|(1), http://libguestfs.org/.
+\&\fBguestfs\fR\|(3), \fBguestfish\fR\|(1), \fBguestmount\fR\|(1), \fBvirt\-copy\-out\fR\|(1), \fBvirt\-drivers\fR\|(1), http://libguestfs.org/.
 .SH "著者"
 .IX Header "著者"
 Richard W.M. Jones http://people.redhat.com/~rjones/
 .SH "COPYRIGHT"
 .IX Header "COPYRIGHT"
-Copyright (C) 2013\-2020 Red Hat Inc.
+Copyright (C) 2013\-2023 Red Hat Inc.
 .SH "LICENSE"
 .IX Header "LICENSE"
 .SH "BUGS"
index 501db19f7ce79cc923766f7c78a74298f9f0eceb..5a26f1a6ff1d07f58443a32ba8984d89b44ecbe4 100644 (file)
@@ -11,7 +11,7 @@ virt-get-kernel - Extract kernel and ramdisk from guests
 
 =head1 説明
 
-This option extracts the kernel and initramfs from a guest.
+This program extracts the kernel and initramfs from a guest.
 
 The format of the disk image is automatically detected unless you specify it by using the I<--format> option.
 
@@ -162,7 +162,7 @@ For other environment variables which affect all libguestfs programs, see L<gues
 
 =head1 関連項目
 
-L<guestfs(3)>, L<guestfish(1)>, L<guestmount(1)>, L<virt-copy-out(1)>, L<http://libguestfs.org/>.
+L<guestfs(3)>, L<guestfish(1)>, L<guestmount(1)>, L<virt-copy-out(1)>, L<virt-drivers(1)>, L<http://libguestfs.org/>.
 
 =head1 著者
 
@@ -170,5 +170,5 @@ Richard W.M. Jones L<http://people.redhat.com/~rjones/>
 
 =head1 COPYRIGHT
 
-Copyright (C) 2013-2020 Red Hat Inc.
+Copyright (C) 2013-2023 Red Hat Inc.
 
index 4c9139452c75b99d5f4b9cedca38eeca3304de10..20c997be1c0551bd3055a2fb4cd66e986eff1e01 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Podwrapper::Man 1.48.3 (Pod::Simple 3.43)
+.\" Automatically generated by Podwrapper::Man 1.50.0 (Pod::Simple 3.43)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -71,7 +71,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-index-validate 1"
-.TH virt-index-validate 1 "2023-01-11" "guestfs-tools-1.48.3" "Virtualization Support"
+.TH virt-index-validate 1 "2023-02-07" "guestfs-tools-1.50.0" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index 28703ab056d44f41f4a9873b729b6e8bf7441684..260eefacc87f8a7eab3492a57f0f03403bf02acd 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Podwrapper::Man 1.48.3 (Pod::Simple 3.43)
+.\" Automatically generated by Podwrapper::Man 1.50.0 (Pod::Simple 3.43)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -71,7 +71,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-inspector 1"
-.TH virt-inspector 1 "2023-01-11" "guestfs-tools-1.48.3" "Virtualization Support"
+.TH virt-inspector 1 "2023-02-07" "guestfs-tools-1.50.0" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -111,6 +111,8 @@ Virt-inspector can only inspect and report upon \fIone domain at a time\fR.  To
 Because virt-inspector needs direct access to guest images, it won’t normally work over remote libvirt connections.
 .PP
 All of the information available from virt-inspector is also available through the core libguestfs inspection \s-1API\s0 (see \*(L"\s-1INSPECTION\*(R"\s0 in \fBguestfs\fR\|(3)). The same information can also be fetched using guestfish or via libguestfs bindings in many programming languages (see \*(L"\s-1GETTING INSPECTION DATA FROM THE LIBGUESTFS API\*(R"\s0).
+.PP
+Additional information about bootloader, kernel and drivers inside a guest can be found using \fBvirt\-drivers\fR\|(1).
 .SH "オプション"
 .IX Header "オプション"
 .IP "\fB\-\-help\fR" 4
@@ -189,6 +191,15 @@ Use the specified \f(CW\*(C`KEY_STRING\*(C'\fR as passphrase.
 .el .IP "\fB\-\-key\fR \f(CWID\fR:file:FILENAME" 4
 .IX Item "--key ID:file:FILENAME"
 Read the passphrase from \fI\s-1FILENAME\s0\fR.
+.ie n .IP "\fB\-\-key\fR ""ID"":clevis" 4
+.el .IP "\fB\-\-key\fR \f(CWID\fR:clevis" 4
+.IX Item "--key ID:clevis"
+Attempt passphrase-less unlocking for \f(CW\*(C`ID\*(C'\fR with Clevis, over the
+network.  Please refer to \*(L"\s-1ENCRYPTED DISKS\*(R"\s0 in \fBguestfs\fR\|(3) for more
+information on network-bound disk encryption (\s-1NBDE\s0).
+.Sp
+Note that if any such option is present on the command line, \s-1QEMU\s0 user
+networking will be automatically enabled for the libguestfs appliance.
 .RE
 .RS 4
 .RE
@@ -493,7 +504,7 @@ As described above, early versions of libguestfs shipped with a different virt-i
 このプログラムは、成功すると 0 を、エラーがあると 0 以外を返します。
 .SH "関連項目"
 .IX Header "関連項目"
-\&\fBguestfs\fR\|(3), \fBguestfish\fR\|(1), http://www.w3.org/TR/xpath/, \fBbase64\fR\|(1), \fBxmlstarlet\fR\|(1), http://libguestfs.org/.
+\&\fBguestfs\fR\|(3), \fBguestfish\fR\|(1), http://www.w3.org/TR/xpath/, \fBbase64\fR\|(1), \fBxmlstarlet\fR\|(1), \fBvirt\-drivers\fR\|(1), http://libguestfs.org/.
 .SH "著者"
 .IX Header "著者"
 .IP "\(bu" 4
@@ -502,7 +513,7 @@ Richard W.M. Jones http://people.redhat.com/~rjones/
 Matthew Booth mbooth@redhat.com
 .SH "COPYRIGHT"
 .IX Header "COPYRIGHT"
-Copyright (C) 2010\-2012 Red Hat Inc.
+Copyright (C) 2010\-2023 Red Hat Inc.
 .SH "LICENSE"
 .IX Header "LICENSE"
 .SH "BUGS"
index d9539cbe42ab163ecade9dd8b56a7cd13d7c14d3..dc7f555999dbf69b523136030fb86a06b200fb52 100644 (file)
@@ -33,6 +33,8 @@ Because virt-inspector needs direct access to guest images, it won’t normally
 
 All of the information available from virt-inspector is also available through the core libguestfs inspection API (see L<guestfs(3)/INSPECTION>). The same information can also be fetched using guestfish or via libguestfs bindings in many programming languages (see L</GETTING INSPECTION DATA FROM THE LIBGUESTFS API>).
 
+Additional information about bootloader, kernel and drivers inside a guest can be found using L<virt-drivers(1)>.
+
 =head1 オプション
 
 =over 4
@@ -368,7 +370,7 @@ As described above, early versions of libguestfs shipped with a different virt-i
 
 =head1 関連項目
 
-L<guestfs(3)>, L<guestfish(1)>, L<http://www.w3.org/TR/xpath/>, L<base64(1)>, L<xmlstarlet(1)>, L<http://libguestfs.org/>.
+L<guestfs(3)>, L<guestfish(1)>, L<http://www.w3.org/TR/xpath/>, L<base64(1)>, L<xmlstarlet(1)>, L<virt-drivers(1)>, L<http://libguestfs.org/>.
 
 =head1 著者
 
@@ -386,5 +388,5 @@ Matthew Booth L<mbooth@redhat.com>
 
 =head1 COPYRIGHT
 
-Copyright (C) 2010-2012 Red Hat Inc.
+Copyright (C) 2010-2023 Red Hat Inc.
 
index 356436341b81529be078a6ff30cb7e6e14546a67..4e02ecb2852085115560b281d1befd7ad4cbb3ec 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Podwrapper::Man 1.48.3 (Pod::Simple 3.43)
+.\" Automatically generated by Podwrapper::Man 1.50.0 (Pod::Simple 3.43)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -71,7 +71,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-log 1"
-.TH virt-log 1 "2023-01-11" "guestfs-tools-1.48.3" "Virtualization Support"
+.TH virt-log 1 "2023-02-07" "guestfs-tools-1.50.0" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -196,6 +196,15 @@ Use the specified \f(CW\*(C`KEY_STRING\*(C'\fR as passphrase.
 .el .IP "\fB\-\-key\fR \f(CWID\fR:file:FILENAME" 4
 .IX Item "--key ID:file:FILENAME"
 Read the passphrase from \fI\s-1FILENAME\s0\fR.
+.ie n .IP "\fB\-\-key\fR ""ID"":clevis" 4
+.el .IP "\fB\-\-key\fR \f(CWID\fR:clevis" 4
+.IX Item "--key ID:clevis"
+Attempt passphrase-less unlocking for \f(CW\*(C`ID\*(C'\fR with Clevis, over the
+network.  Please refer to \*(L"\s-1ENCRYPTED DISKS\*(R"\s0 in \fBguestfs\fR\|(3) for more
+information on network-bound disk encryption (\s-1NBDE\s0).
+.Sp
+Note that if any such option is present on the command line, \s-1QEMU\s0 user
+networking will be automatically enabled for the libguestfs appliance.
 .RE
 .RS 4
 .RE
@@ -234,7 +243,7 @@ libguestfs \s-1API\s0 呼び出しのトレースを有効にします。
 Richard W.M. Jones http://people.redhat.com/~rjones/
 .SH "COPYRIGHT"
 .IX Header "COPYRIGHT"
-Copyright (C) 2010\-2020 Red Hat Inc.
+Copyright (C) 2010\-2023 Red Hat Inc.
 .SH "LICENSE"
 .IX Header "LICENSE"
 .SH "BUGS"
index 1373d5f082dc925dfd890a01c0d896d749aab8ac..0e55847315b0e53a1d1be0c8dda281f517ae0b36 100644 (file)
@@ -123,5 +123,5 @@ Richard W.M. Jones L<http://people.redhat.com/~rjones/>
 
 =head1 COPYRIGHT
 
-Copyright (C) 2010-2020 Red Hat Inc.
+Copyright (C) 2010-2023 Red Hat Inc.
 
index eae68116212260f8c616fe3c870b852ee25848aa..1aa3ad9701ebeb45ce4f2f32addfcf9db643461d 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Podwrapper::Man 1.48.3 (Pod::Simple 3.43)
+.\" Automatically generated by Podwrapper::Man 1.50.0 (Pod::Simple 3.43)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -71,7 +71,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-ls 1"
-.TH virt-ls 1 "2023-01-11" "guestfs-tools-1.48.3" "Virtualization Support"
+.TH virt-ls 1 "2023-02-07" "guestfs-tools-1.50.0" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -389,6 +389,15 @@ Use the specified \f(CW\*(C`KEY_STRING\*(C'\fR as passphrase.
 .el .IP "\fB\-\-key\fR \f(CWID\fR:file:FILENAME" 4
 .IX Item "--key ID:file:FILENAME"
 Read the passphrase from \fI\s-1FILENAME\s0\fR.
+.ie n .IP "\fB\-\-key\fR ""ID"":clevis" 4
+.el .IP "\fB\-\-key\fR \f(CWID\fR:clevis" 4
+.IX Item "--key ID:clevis"
+Attempt passphrase-less unlocking for \f(CW\*(C`ID\*(C'\fR with Clevis, over the
+network.  Please refer to \*(L"\s-1ENCRYPTED DISKS\*(R"\s0 in \fBguestfs\fR\|(3) for more
+information on network-bound disk encryption (\s-1NBDE\s0).
+.Sp
+Note that if any such option is present on the command line, \s-1QEMU\s0 user
+networking will be automatically enabled for the libguestfs appliance.
 .RE
 .RS 4
 .RE
@@ -533,7 +542,7 @@ Most spreadsheets and databases can import \s-1CSV\s0 directly.
 Richard W.M. Jones http://people.redhat.com/~rjones/
 .SH "COPYRIGHT"
 .IX Header "COPYRIGHT"
-Copyright (C) 2009\-2020 Red Hat Inc.
+Copyright (C) 2009\-2023 Red Hat Inc.
 .SH "LICENSE"
 .IX Header "LICENSE"
 .SH "BUGS"
index 1629f2ddd20e3092b6498fee398bee5c7ee6dc46..a78ae42f5a9aa1f4785a87540188e47d8b95d117 100644 (file)
@@ -429,5 +429,5 @@ Richard W.M. Jones L<http://people.redhat.com/~rjones/>
 
 =head1 COPYRIGHT
 
-Copyright (C) 2009-2020 Red Hat Inc.
+Copyright (C) 2009-2023 Red Hat Inc.
 
index 881e321ad92ea6c9643ae0fcd6bf7d449b7e2429..318a11937cbc52ee6c7e74b8232a3840d4b7d260 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Podwrapper::Man 1.48.3 (Pod::Simple 3.43)
+.\" Automatically generated by Podwrapper::Man 1.50.0 (Pod::Simple 3.43)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -71,7 +71,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-make-fs 1"
-.TH virt-make-fs 1 "2023-01-11" "guestfs-tools-1.48.3" "Virtualization Support"
+.TH virt-make-fs 1 "2023-02-07" "guestfs-tools-1.50.0" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -255,7 +255,7 @@ Enable libguestfs trace.
 Richard W.M. Jones http://people.redhat.com/~rjones/
 .SH "COPYRIGHT"
 .IX Header "COPYRIGHT"
-Copyright (C) 2010\-2020 Red Hat Inc.
+Copyright (C) 2010\-2023 Red Hat Inc.
 .SH "LICENSE"
 .IX Header "LICENSE"
 .SH "BUGS"
index 13bb855b5a4bae45d6e59110bab2eceaf1b80dce..92490f9e20ccdcd581b54bd52ff2df01c55551de 100644 (file)
@@ -179,5 +179,5 @@ Richard W.M. Jones L<http://people.redhat.com/~rjones/>
 
 =head1 COPYRIGHT
 
-Copyright (C) 2010-2020 Red Hat Inc.
+Copyright (C) 2010-2023 Red Hat Inc.
 
index 02b54405c08443e26b2a08b59a25bee6b7bd5ac0..bef0c944fb2919360d84959f0813017007ceaa60 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Podwrapper::Man 1.48.3 (Pod::Simple 3.43)
+.\" Automatically generated by Podwrapper::Man 1.50.0 (Pod::Simple 3.43)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -71,7 +71,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-resize 1"
-.TH virt-resize 1 "2023-01-11" "guestfs-tools-1.48.3" "Virtualization Support"
+.TH virt-resize 1 "2023-02-07" "guestfs-tools-1.50.0" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -656,7 +656,7 @@ There are several proprietary tools for resizing partitions.  We won't mention a
 Richard W.M. Jones http://people.redhat.com/~rjones/
 .SH "COPYRIGHT"
 .IX Header "COPYRIGHT"
-Copyright (C) 2010\-2012 Red Hat Inc.
+Copyright (C) 2010\-2023 Red Hat Inc.
 .SH "LICENSE"
 .IX Header "LICENSE"
 .SH "BUGS"
index 0b5fff699be5ded198d3362d068720352c939bdd..0ed66e1fd241fda2686e798da1fb1b92f49f7feb 100644 (file)
@@ -617,5 +617,5 @@ Richard W.M. Jones L<http://people.redhat.com/~rjones/>
 
 =head1 COPYRIGHT
 
-Copyright (C) 2010-2012 Red Hat Inc.
+Copyright (C) 2010-2023 Red Hat Inc.
 
index a348cf56d8a3a5b3adf31b9941438a24833b50e8..7ffa2029a5dc382e4e41c855eb282c6fbf363454 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Podwrapper::Man 1.48.3 (Pod::Simple 3.43)
+.\" Automatically generated by Podwrapper::Man 1.50.0 (Pod::Simple 3.43)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -71,7 +71,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-sparsify 1"
-.TH virt-sparsify 1 "2023-01-11" "guestfs-tools-1.48.3" "Virtualization Support"
+.TH virt-sparsify 1 "2023-02-07" "guestfs-tools-1.50.0" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -261,6 +261,15 @@ Use the specified \f(CW\*(C`KEY_STRING\*(C'\fR as passphrase.
 .el .IP "\fB\-\-key\fR \f(CWID\fR:file:FILENAME" 4
 .IX Item "--key ID:file:FILENAME"
 Read the passphrase from \fI\s-1FILENAME\s0\fR.
+.ie n .IP "\fB\-\-key\fR ""ID"":clevis" 4
+.el .IP "\fB\-\-key\fR \f(CWID\fR:clevis" 4
+.IX Item "--key ID:clevis"
+Attempt passphrase-less unlocking for \f(CW\*(C`ID\*(C'\fR with Clevis, over the
+network.  Please refer to \*(L"\s-1ENCRYPTED DISKS\*(R"\s0 in \fBguestfs\fR\|(3) for more
+information on network-bound disk encryption (\s-1NBDE\s0).
+.Sp
+Note that if any such option is present on the command line, \s-1QEMU\s0 user
+networking will be automatically enabled for the libguestfs appliance.
 .RE
 .RS 4
 .RE
@@ -438,7 +447,7 @@ If the exit code is \f(CW3\fR and the \fI\-\-in\-place\fR option was used, that
 Richard W.M. Jones http://people.redhat.com/~rjones/
 .SH "COPYRIGHT"
 .IX Header "COPYRIGHT"
-Copyright (C) 2011\-2020 Red Hat Inc.
+Copyright (C) 2011\-2023 Red Hat Inc.
 .SH "LICENSE"
 .IX Header "LICENSE"
 .SH "BUGS"
index 9d19640c5ef811d92391fb83ac310a81afe2bfa1..47109f5f03e15dd95d2c77a950e9437ef6c4610f 100644 (file)
@@ -376,5 +376,5 @@ Richard W.M. Jones L<http://people.redhat.com/~rjones/>
 
 =head1 COPYRIGHT
 
-Copyright (C) 2011-2020 Red Hat Inc.
+Copyright (C) 2011-2023 Red Hat Inc.
 
index 75fe444f3be6fa039935988765c60edc3b6b0eac..d1d182b877599ad511865a4d46955386c2b344a5 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Podwrapper::Man 1.48.3 (Pod::Simple 3.43)
+.\" Automatically generated by Podwrapper::Man 1.50.0 (Pod::Simple 3.43)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -71,7 +71,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-sysprep 1"
-.TH virt-sysprep 1 "2023-01-11" "guestfs-tools-1.48.3" "Virtualization Support"
+.TH virt-sysprep 1 "2023-02-07" "guestfs-tools-1.50.0" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -234,6 +234,15 @@ Use the specified \f(CW\*(C`KEY_STRING\*(C'\fR as passphrase.
 .el .IP "\fB\-\-key\fR \f(CWID\fR:file:FILENAME" 4
 .IX Item "--key ID:file:FILENAME"
 Read the passphrase from \fI\s-1FILENAME\s0\fR.
+.ie n .IP "\fB\-\-key\fR ""ID"":clevis" 4
+.el .IP "\fB\-\-key\fR \f(CWID\fR:clevis" 4
+.IX Item "--key ID:clevis"
+Attempt passphrase-less unlocking for \f(CW\*(C`ID\*(C'\fR with Clevis, over the
+network.  Please refer to \*(L"\s-1ENCRYPTED DISKS\*(R"\s0 in \fBguestfs\fR\|(3) for more
+information on network-bound disk encryption (\s-1NBDE\s0).
+.Sp
+Note that if any such option is present on the command line, \s-1QEMU\s0 user
+networking will be automatically enabled for the libguestfs appliance.
 .RE
 .RS 4
 .RE
@@ -444,6 +453,36 @@ For an overview on the different ways to install packages, see \*(L"\s-1INSTALLI
 .el .IP "\fB\-\-hostname\fR \s-1HOSTNAME\s0 (see \f(CWcustomize\fR below)" 4
 .IX Item "--hostname HOSTNAME (see customize below)"
 Set the hostname of the guest to \f(CW\*(C`HOSTNAME\*(C'\fR.  You can use a dotted hostname.domainname (\s-1FQDN\s0) if you want.
+.ie n .IP "\fB\-\-inject\-qemu\-ga\fR \s-1METHOD\s0 (see ""customize"" below)" 4
+.el .IP "\fB\-\-inject\-qemu\-ga\fR \s-1METHOD\s0 (see \f(CWcustomize\fR below)" 4
+.IX Item "--inject-qemu-ga METHOD (see customize below)"
+Inject the \s-1QEMU\s0 Guest Agent into a Windows guest.  The guest agent communicates with qemu through a socket in order to provide enhanced features (see \fBqemu\-ga\fR\|(8)).  This operation also injects a firstboot script so that the Guest Agent is installed when the guest boots.
+.Sp
+The parameter is the same as used by the \fI\-\-inject\-virtio\-win\fR operation.
+.Sp
+Note that to do a full conversion of a Windows guest from a foreign hypervisor like VMware (which involves many other operations)  you should use the \fBvirt\-v2v\fR\|(1) tool instead of this.
+.ie n .IP "\fB\-\-inject\-virtio\-win\fR \s-1METHOD\s0 (see ""customize"" below)" 4
+.el .IP "\fB\-\-inject\-virtio\-win\fR \s-1METHOD\s0 (see \f(CWcustomize\fR below)" 4
+.IX Item "--inject-virtio-win METHOD (see customize below)"
+Inject virtio-win drivers into a Windows guest.  These drivers add virtio accelerated drivers suitable when running on top of a hypervisor that supports virtio (such as qemu/KVM).  The operation also adjusts the Windows Registry so that the drivers are installed when the guest boots.
+.Sp
+The parameter can be one of:
+.RS 4
+.IP "\s-1ISO\s0" 4
+.IX Item "ISO"
+The path to the \s-1ISO\s0 image containing the virtio-win drivers (eg. \fI/usr/share/virtio\-win/virtio\-win.iso\fR).
+.IP "\s-1DIR\s0" 4
+.IX Item "DIR"
+The directory containing the unpacked virtio-win drivers (eg. \fI/usr/share/virtio\-win\fR).
+.ie n .IP "\fB""osinfo""\fR" 4
+.el .IP "\fB``osinfo''\fR" 4
+.IX Item "osinfo"
+The literal string \f(CW"osinfo"\fR means to use the libosinfo database to locate the drivers.  (See \fBosinfo\-query\fR\|(1).
+.RE
+.RS 4
+.Sp
+Note that to do a full conversion of a Windows guest from a foreign hypervisor like VMware (which involves many other operations)  you should use the \fBvirt\-v2v\fR\|(1) tool instead of this.
+.RE
 .ie n .IP "\fB\-\-install\fR \s-1PKG,PKG..\s0  (see ""customize"" below)" 4
 .el .IP "\fB\-\-install\fR \s-1PKG,PKG..\s0  (see \f(CWcustomize\fR below)" 4
 .IX Item "--install PKG,PKG.. (see customize below)"
@@ -486,6 +525,14 @@ Wildcards cannot be used.
 Scrub \f(CW\*(C`builder.log\*(C'\fR (log file from build commands) from the image after building is complete.  If you don't want to reveal precisely how the image was built, use this option.
 .Sp
 See also: \*(L"\s-1LOG FILE\*(R"\s0.
+.ie n .IP "\fB\-\-no\-selinux\-relabel\fR (see ""customize"" below)" 4
+.el .IP "\fB\-\-no\-selinux\-relabel\fR (see \f(CWcustomize\fR below)" 4
+.IX Item "--no-selinux-relabel (see customize below)"
+Do not attempt to correct the SELinux labels of files in the guest.
+.Sp
+In such guests that support SELinux, customization automatically relabels files so that they have the correct SELinux label.  (The relabeling is performed immediately, but if the operation fails, customization will instead touch \fI/.autorelabel\fR on the image to schedule a relabel operation for the next time the image boots.)  This option disables the automatic relabeling.
+.Sp
+The option is a no-op for guests that do not support SELinux.
 .ie n .IP "\fB\-\-password\fR \s-1USER:SELECTOR\s0 (see ""customize"" below)" 4
 .el .IP "\fB\-\-password\fR \s-1USER:SELECTOR\s0 (see \f(CWcustomize\fR below)" 4
 .IX Item "--password USER:SELECTOR (see customize below)"
@@ -575,11 +622,7 @@ It cannot delete directories, only regular files.
 .ie n .IP "\fB\-\-selinux\-relabel\fR (see ""customize"" below)" 4
 .el .IP "\fB\-\-selinux\-relabel\fR (see \f(CWcustomize\fR below)" 4
 .IX Item "--selinux-relabel (see customize below)"
-Relabel files in the guest so that they have the correct SELinux label.
-.Sp
-This will attempt to relabel files immediately, but if the operation fails this will instead touch \fI/.autorelabel\fR on the image to schedule a relabel operation for the next time the image boots.
-.Sp
-You should only use this option for guests which support SELinux.
+This is a compatibility option that does nothing.
 .ie n .IP "\fB\-\-sm\-attach\fR \s-1SELECTOR\s0 (see ""customize"" below)" 4
 .el .IP "\fB\-\-sm\-attach\fR \s-1SELECTOR\s0 (see \f(CWcustomize\fR below)" 4
 .IX Item "--sm-attach SELECTOR (see customize below)"
@@ -919,6 +962,11 @@ Linux においては以下のファイルが削除されます:
 /var/log/xferlog*
 .IP "·" 4
 /var/named/data/named.run
+.SS "\fBlvm-system-devices\fP *"
+.IX Subsection "lvm-system-devices *"
+Remove \s-1LVM2\s0 system.devices file.
+.PP
+On Linux guests, \s-1LVM2\s0's scanning for physical volumes (PVs) may be restricted to those block devices whose WWIDs are listed in \f(CW\*(C`/etc/lvm/devices/system.devices\*(C'\fR.  When cloning VMs, WWIDs may change, breaking \f(CW\*(C`lvm pvscan\*(C'\fR.  Remove \f(CW\*(C`/etc/lvm/devices/system.devices\*(C'\fR.
 .SS "\fBlvm-uuids\fP *"
 .IX Subsection "lvm-uuids *"
 \&\s-1LVM2\s0 の \s-1PV\s0 および \s-1VG\s0 の \s-1UUID\s0 を変更します。
@@ -1212,6 +1260,8 @@ On the other hand if you need to make adjustments to the guest filesystem (eg. c
 Either or both options can be used multiple times on the command line.
 .SH "セキュリティ"
 .IX Header "セキュリティ"
+Virtual machines that employ full disk encryption \fIinternally to the guest\fR should not be considered for cloning and distribution, as it provides multiple parties with the same internal volume key, enabling any one such party to decrypt all the other clones.  Refer to the \s-1LUKS FAQ\s0 for details.
+.PP
 Although virt-sysprep removes some sensitive information from the guest, it does not pretend to remove all of it.  You should examine the \*(L"\s-1OPERATIONS\*(R"\s0 above and the guest afterwards.
 .PP
 Sensitive files are simply removed.  The data they contained may still exist on the disk, easily recovered with a hex editor or undelete tool.  The \fI\-\-scrub\fR option can be used to scrub files instead of just deleting them. \fBvirt\-sparsify\fR\|(1) is another way to remove this content.  See also the \fBscrub\fR\|(1) command to get rid of deleted content in directory entries and inodes.
@@ -1274,7 +1324,7 @@ Richard W.M. Jones http://people.redhat.com/~rjones/
 Wanlong Gao, Fujitsu Ltd.
 .SH "COPYRIGHT"
 .IX Header "COPYRIGHT"
-Copyright (C) 2011\-2020 Red Hat Inc.
+Copyright (C) 2011\-2023 Red Hat Inc.
 .PP
 Copyright (C) 2012 Fujitsu Ltd.
 .SH "LICENSE"
index f762c2860da118959f54e418c7ccf4b7d24ff635..8148fa259e30d9fd67ef6087bec8dd30ba65ce21 100644 (file)
@@ -402,6 +402,8 @@ Either or both options can be used multiple times on the command line.
 
 =head1 セキュリティ
 
+Virtual machines that employ full disk encryption I<internally to the guest> should not be considered for cloning and distribution, as it provides multiple parties with the same internal volume key, enabling any one such party to decrypt all the other clones.  Refer to the L<LUKS FAQ|https://gitlab.com/cryptsetup/cryptsetup/-/blob/main/FAQ.md> for details.
+
 Although virt-sysprep removes some sensitive information from the guest, it does not pretend to remove all of it.  You should examine the L</OPERATIONS> above and the guest afterwards.
 
 Sensitive files are simply removed.  The data they contained may still exist on the disk, easily recovered with a hex editor or undelete tool.  The I<--scrub> option can be used to scrub files instead of just deleting them. L<virt-sparsify(1)> is another way to remove this content.  See also the L<scrub(1)> command to get rid of deleted content in directory entries and inodes.
@@ -475,7 +477,7 @@ Wanlong Gao, Fujitsu Ltd.
 
 =head1 COPYRIGHT
 
-Copyright (C) 2011-2020 Red Hat Inc.
+Copyright (C) 2011-2023 Red Hat Inc.
 
 Copyright (C) 2012 Fujitsu Ltd.
 
index 500be60e696a47730dbce63ca9e4a239aff9593b..9e79174180aa91258f7783dfe18b3b931f0cccda 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Podwrapper::Man 1.48.3 (Pod::Simple 3.43)
+.\" Automatically generated by Podwrapper::Man 1.50.0 (Pod::Simple 3.43)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -71,7 +71,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-win-reg 1"
-.TH virt-win-reg 1 "2023-01-11" "guestfs-tools-1.48.3" "Virtualization Support"
+.TH virt-win-reg 1 "2023-02-07" "guestfs-tools-1.50.0" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index dd4b454ab7835e87149c6b5f4bf86bdbcb58aa44..b4e3544ca2f41487227c387a23e2be3e8ba5e403 100644 (file)
@@ -1,5 +1,5 @@
 # libguestfs translations of man pages and POD files
-# Copyright (C) 2010-2012 Red Hat Inc.
+# Copyright (C) 2010-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index 7166bb8a600a4f2211244036108df3cc2b295da8..cc835ef69e0fa7a5b67d5e5d803090ef6e27e4db 100644 (file)
@@ -17,6 +17,8 @@ df/virt-df.pod
 dib/virt-dib.pod
 diff/virt-diff.pod
 docs/guestfs-tools-release-notes-1.48.pod
+docs/guestfs-tools-release-notes-1.50.pod
+drivers/virt-drivers.pod
 edit/virt-edit.pod
 format/virt-format.pod
 get-kernel/virt-get-kernel.pod
index a6ebec23abace2c067a9d9153570e85d316b2475..2c804de78c2e377dd63a84c0d5f0ac07da876718 100644 (file)
@@ -1,5 +1,5 @@
 # libguestfs translations of man pages and POD files
-# Copyright (C) 2010-2012 Red Hat Inc.
+# Copyright (C) 2010-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index 14e617a6fbcc9c5465ac225e5df8e14c13a2cc1a..8087ff6f4e1dabc87af1d0d9ae4901428ed8f76d 100644 (file)
@@ -15,7 +15,7 @@
 @SET_MAKE@
 
 # libguestfs translations of man pages and POD files
-# Copyright (C) 2010-2012 Red Hat Inc.
+# Copyright (C) 2010-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -37,7 +37,7 @@
 # All the actual logic should be in language.mk.
 
 # libguestfs translations of man pages and POD files
-# Copyright (C) 2010-2012 Red Hat Inc.
+# Copyright (C) 2010-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -56,7 +56,7 @@
 # Common logic for generating translated documentation.
 
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -242,7 +242,6 @@ EGREP = @EGREP@
 ETAGS = @ETAGS@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FILECMD = @FILECMD@
 GCC_VISIBILITY_HIDDEN = @GCC_VISIBILITY_HIDDEN@
 GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
 GMSGFMT = @GMSGFMT@
@@ -271,6 +270,8 @@ LIBINTL = @LIBINTL@
 LIBLZMA_CFLAGS = @LIBLZMA_CFLAGS@
 LIBLZMA_LIBS = @LIBLZMA_LIBS@
 LIBOBJS = @LIBOBJS@
+LIBOSINFO_CFLAGS = @LIBOSINFO_CFLAGS@
+LIBOSINFO_LIBS = @LIBOSINFO_LIBS@
 LIBS = @LIBS@
 LIBTINFO_CFLAGS = @LIBTINFO_CFLAGS@
 LIBTINFO_LIBS = @LIBTINFO_LIBS@
@@ -341,6 +342,7 @@ PO4A_TRANSLATE = @PO4A_TRANSLATE@
 PODWRAPPER = @PODWRAPPER@
 POSUB = @POSUB@
 RANLIB = @RANLIB@
+REALPATH = @REALPATH@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
index 0d258c1862433cb0c82e14c64f753edc3fe28687..594c481ce8080272a37acd4416a49cb5ab8e3f5a 100644 (file)
@@ -7,7 +7,7 @@ libguestfs generated file
           and from the code in the generator/ subdirectory.
  ANY CHANGES YOU MAKE TO THIS FILE WILL BE LOST.
 
- Copyright (C) 2009-2020 Red Hat Inc.
+ Copyright (C) 2009-2023 Red Hat Inc.
 
  Ця програма є вільним програмним забезпеченням; ви можете поширювати та/або
  змінювати її за умов дотримання GNU General Public License  утому вигляді, що
@@ -138,6 +138,38 @@ I<Зауваження>: типово C<ПРАВА_ДОСТУПУ> запису
 
 Встановити як назву вузла гостьової системи значення C<НАЗВА_ВУЗЛА>. Якщо потрібно, можете скористатися форматом із крапкою, «назва_вузла.назва_домену» (FQDN).
 
+=item B<--inject-qemu-ga> METHOD
+
+Inject the QEMU Guest Agent into a Windows guest.  The guest agent communicates with qemu through a socket in order to provide enhanced features (see L<qemu-ga(8)>).  This operation also injects a firstboot script so that the Guest Agent is installed when the guest boots.
+
+The parameter is the same as used by the I<--inject-virtio-win> operation.
+
+Note that to do a full conversion of a Windows guest from a foreign hypervisor like VMware (which involves many other operations)  you should use the L<virt-v2v(1)> tool instead of this.
+
+=item B<--inject-virtio-win> METHOD
+
+Inject virtio-win drivers into a Windows guest.  These drivers add virtio accelerated drivers suitable when running on top of a hypervisor that supports virtio (such as qemu/KVM).  The operation also adjusts the Windows Registry so that the drivers are installed when the guest boots.
+
+The parameter can be one of:
+
+=over 4
+
+=item ISO
+
+The path to the ISO image containing the virtio-win drivers (eg. F</usr/share/virtio-win/virtio-win.iso>).
+
+=item DIR
+
+The directory containing the unpacked virtio-win drivers (eg. F</usr/share/virtio-win>).
+
+=item B<"osinfo">
+
+The literal string C<"osinfo"> means to use the libosinfo database to locate the drivers.  (See L<osinfo-query(1)>.
+
+=back
+
+Note that to do a full conversion of a Windows guest from a foreign hypervisor like VMware (which involves many other operations)  you should use the L<virt-v2v(1)> tool instead of this.
+
 =item B<--install> ПАКУНОК,ПАКУНОК..
 
 Встановити іменовані пакунки (список значень, відокремлених комами). Ці пакунки буде встановлено під час збирання образу за допомогою програми для керування пакунків гостьової системи (наприклад, apt, yum тощо) і з'єднання із мережею основної системи.
@@ -168,6 +200,14 @@ I<Зауваження>: типово C<ПРАВА_ДОСТУПУ> запису
 
 Див. також L</LOG FILE>.
 
+=item B<--no-selinux-relabel>
+
+Do not attempt to correct the SELinux labels of files in the guest.
+
+In such guests that support SELinux, customization automatically relabels files so that they have the correct SELinux label.  (The relabeling is performed immediately, but if the operation fails, customization will instead touch F</.autorelabel> on the image to schedule a relabel operation for the next time the image boots.)  This option disables the automatic relabeling.
+
+The option is a no-op for guests that do not support SELinux.
+
 =item B<--password> КОРИСТУВАЧ:ВАРІАНТ
 
 Встановити пароль для користувача C<КОРИСТУВАЧ>. (Зауважте, що за допомогою цього параметра I<не можна> створювати облікові записи користувачів.)
@@ -234,11 +274,7 @@ C<md5> працюватиме з відносно давніми гостьов
 
 =item B<--selinux-relabel>
 
-Повторно встановити мітки для файлів у гостьовій системі так, щоб вони були правильними з точки зору SELinux.
-
-Якщо буде використано цей параметр, програма спробує змінити мітки файлів негайно, але якщо цього зробити не вдасться, вона змінить часову мітку файла F</.autorelabel> на образі, щоб дію зі зміни міток було заплановано на наступне завантаження образу.
-
-Вам слід використовувати цей параметр лише для гостьових систем із підтримкою SELinux.
+This is a compatibility option that does nothing.
 
 =item B<--sm-attach> ВАРІАНТ
 
index b2500d445c891e7b85c10344398690c8b0798ea4..f946e7df5cd7fa538471db843a2162ff6ee91050 100644 (file)
@@ -111,5 +111,5 @@ git shortlog -s v1.46.0..
 
 =head1 АВТОРСЬКІ ПРАВА
 
-Copyright (C) 2009-2022 Red Hat Inc.
+Copyright (C) 2009-2023 Red Hat Inc.
 
diff --git a/po-docs/uk/guestfs-tools-release-notes-1.50.pod b/po-docs/uk/guestfs-tools-release-notes-1.50.pod
new file mode 100644 (file)
index 0000000..c8c1edc
--- /dev/null
@@ -0,0 +1,163 @@
+
+=head1 НАЗВА
+
+guestfs-tools-release-notes - guestfs tools release Notes
+
+=head1 RELEASE NOTES FOR GUESTFS TOOLS 1.50
+
+These are the release notes for guestfs tools stable release 1.50.  This describes the major changes since 1.48.
+
+Guestfs tools 1.50.0 was released on B<7 February 2023>.
+
+=head2 Безпека
+
+=over 4
+
+=item CVE-2022-2211
+
+L<https://bugzilla.redhat.com/show_bug.cgi?id=2100862>
+
+A buffer overflow was found in the I<--key> option of several guestfs tools.  For more information on this low severity bug see the bug report above (Laszlo Ersek).
+
+=back
+
+=head2 New virt-drivers tool
+
+This new tool can examine a disk image to determine:
+
+=over 4
+
+=item *
+
+Whether it uses BIOS or UEFI for booting
+
+=item *
+
+What bootloader it uses (Linux only)
+
+=item *
+
+What kernels may be chosen at boot time (Linux only)
+
+=item *
+
+What device drivers (kernel modules) are installed
+
+=back
+
+This is useful for determining how (or if) a guest can boot on a virtualization hypervisor.
+
+=head2 virt-customize
+
+I<--selinux-relabel> is now the default for SELinux guests.  You no longer need to specify this flag.  In the rare case where you don't want to relabel a guest after customizing it, you can use I<--no-selinux-relabel>.  Note this is not needed for non-SELinux guests, it will do the right thing automatically (Laszlo Ersek).
+
+New I<--inject-qemu-ga> and I<--inject-virtio-win> operations which respectively inject QEMU Guest Agent and virtio-win drivers into Windows guests.
+
+Rocky Linux guests are now supported (thanks Harry Benson).
+
+=head2 virt-inspector
+
+Virt-inspector now outputs the new E<lt>build_idE<gt> element containing the guest build ID, if using libguestfs E<ge> 1.50.
+
+=head2 virt-sysprep
+
+New C<lvm-system-devices> operation for removing LVM2's F<system.devices> file.  This avoids certain problems when cloning a VM (Laszlo Ersek).
+
+Virt-sysprep supports guests using LUKS logical volumes on top of LVM (Laszlo Ersek).
+
+=head2 Common changes
+
+All the tools supporting the I<--key> option can now use Clevis/Tang to decrypt full disk encryption using this network-based scheme (Laszlo Ersek).
+
+=head2 Зміни у збиранні
+
+B<Note> that libguestfs now requires minimum OCaml 4.04.  It will not compile on RHEL 6.
+
+B<Note> that libosinfo is a new required dependency.
+
+OCaml 4.14 is now supported.
+
+C<./configure --disable-ocaml> and C<./configure --disable-perl> now disable the OCaml- and Perl-based tools respectively (thanks Simon Walter).
+
+Experimental support for compiling on macOS.
+
+When running C<make check-valgrind>, Valgrind logs are no longer written to separate files under F<tmp/>.  Instead the output is written to the normal F<I<test-name>.log> file.
+
+=begin коментар
+
+=head2 Внутрішня частина роботи програми
+
+=end коментар
+
+=head2 Виправлені вади
+
+=begin коментар
+
+https_proxy= ./bugs-in-changelog.sh v1.48.0..
+
+=end коментар
+
+=over 4
+
+=item L<https://bugzilla.redhat.com/2133443>
+
+RFE: Support Rocky Linux in virt-customize
+
+=item L<https://bugzilla.redhat.com/2106286>
+
+virt-sysprep: make an effort to support LUKS on LV
+
+=item L<https://bugzilla.redhat.com/2089748>
+
+Removal of "--selinux-relabel" option breaks existing scripts
+
+=item L<https://bugzilla.redhat.com/2075718>
+
+Having to use "--selinux-relabel" is not intuitive given Red Hat products default to selinux enabled.
+
+=item L<https://bugzilla.redhat.com/2072493>
+
+[RFE] Request to add lvm system.devices cleanup operation to virt-sysprep
+
+=item L<https://bugzilla.redhat.com/2059545>
+
+[RHEL 9.0][Nutanix] lvm partition "home" will lost with SCSI disk either in the new cloned VM or restored from a snapshot
+
+=item L<https://bugzilla.redhat.com/2028764>
+
+Install the qemu-guest-agent package during the conversion process
+
+=item L<https://bugzilla.redhat.com/1809453>
+
+[RFE] Add support for LUKS encrypted disks with Clevis & Tang
+
+=item L<https://bugzilla.redhat.com/1554735>
+
+RFE: customize --selinux-relabel should be the default, with --no-selinux-relabel used to opt out
+
+=back
+
+=head1 ТАКОЖ ПЕРЕГЛЯНЬТЕ
+
+L<http://libguestfs.org/>
+
+=head1 АВТОРИ
+
+=begin коментар
+
+git shortlog -s v1.48.0..
+
+=end коментар
+
+=over 4
+
+=item Laszlo Ersek
+
+=item Richard W.M. Jones
+
+=back
+
+=head1 АВТОРСЬКІ ПРАВА
+
+Copyright (C) 2009-2023 Red Hat Inc.
+
index 4162931cc625cb153134bbf140c139c83ec19d96..1cf2f0b32852e8df0a728a04b0fcd6574a94fccf 100644 (file)
@@ -13,5 +13,11 @@ Specify a key for LUKS, to automatically open a LUKS device when using the inspe
 
 Прочитати пароль з файла F<НАЗВА_ФАЙЛА>.
 
+=item B<--key> C<ID>:clevis
+
+Attempt passphrase-less unlocking for C<ID> with Clevis, over the network. Please refer to L<guestfs(3)/ENCRYPTED DISKS> for more information on network-bound disk encryption (NBDE).
+
+Note that if any such option is present on the command line, QEMU user networking will be automatically enabled for the libguestfs appliance.
+
 =back
 
index 1f93d7a0a3291add30c93cd539261fda6db3ff10..8c6ddcea5e1df1242f36b69d8dacf5e5504146b8 100644 (file)
@@ -110,6 +110,38 @@ I<Зауваження>: типово C<ПРАВА_ДОСТУПУ> запису
 
 Встановити як назву вузла гостьової системи значення C<НАЗВА_ВУЗЛА>. Якщо потрібно, можете скористатися форматом із крапкою, «назва_вузла.назва_домену» (FQDN).
 
+=item B<--inject-qemu-ga> METHOD (see C<customize> below)
+
+Inject the QEMU Guest Agent into a Windows guest.  The guest agent communicates with qemu through a socket in order to provide enhanced features (see L<qemu-ga(8)>).  This operation also injects a firstboot script so that the Guest Agent is installed when the guest boots.
+
+The parameter is the same as used by the I<--inject-virtio-win> operation.
+
+Note that to do a full conversion of a Windows guest from a foreign hypervisor like VMware (which involves many other operations)  you should use the L<virt-v2v(1)> tool instead of this.
+
+=item B<--inject-virtio-win> METHOD (see C<customize> below)
+
+Inject virtio-win drivers into a Windows guest.  These drivers add virtio accelerated drivers suitable when running on top of a hypervisor that supports virtio (such as qemu/KVM).  The operation also adjusts the Windows Registry so that the drivers are installed when the guest boots.
+
+The parameter can be one of:
+
+=over 4
+
+=item ISO
+
+The path to the ISO image containing the virtio-win drivers (eg. F</usr/share/virtio-win/virtio-win.iso>).
+
+=item DIR
+
+The directory containing the unpacked virtio-win drivers (eg. F</usr/share/virtio-win>).
+
+=item B<"osinfo">
+
+The literal string C<"osinfo"> means to use the libosinfo database to locate the drivers.  (See L<osinfo-query(1)>.
+
+=back
+
+Note that to do a full conversion of a Windows guest from a foreign hypervisor like VMware (which involves many other operations)  you should use the L<virt-v2v(1)> tool instead of this.
+
 =item B<--install> ПАКУНОК,ПАКУНОК... (див. C<customize> нижче)
 
 Встановити іменовані пакунки (список значень, відокремлених комами). Ці пакунки буде встановлено під час збирання образу за допомогою програми для керування пакунків гостьової системи (наприклад, apt, yum тощо) і з'єднання із мережею основної системи.
@@ -150,6 +182,14 @@ I<Зауваження>: типово C<ПРАВА_ДОСТУПУ> запису
 
 Див. також L</LOG FILE>.
 
+=item B<--no-selinux-relabel> (see C<customize> below)
+
+Do not attempt to correct the SELinux labels of files in the guest.
+
+In such guests that support SELinux, customization automatically relabels files so that they have the correct SELinux label.  (The relabeling is performed immediately, but if the operation fails, customization will instead touch F</.autorelabel> on the image to schedule a relabel operation for the next time the image boots.)  This option disables the automatic relabeling.
+
+The option is a no-op for guests that do not support SELinux.
+
 =item B<--password> КОРИСТУВАЧ:ВАРІАНТ (див. C<customize> нижче)
 
 Встановити пароль для користувача C<КОРИСТУВАЧ>. (Зауважте, що за допомогою цього параметра I<не можна> створювати облікові записи користувачів.)
@@ -240,11 +280,7 @@ B<Зауваження:> C<SCRIPTDIR> B<має> бути вказано повн
 
 =item B<--selinux-relabel> (див. C<customize> нижче)
 
-Повторно встановити мітки для файлів у гостьовій системі так, щоб вони були правильними з точки зору SELinux.
-
-Якщо буде використано цей параметр, програма спробує змінити мітки файлів негайно, але якщо цього зробити не вдасться, вона змінить часову мітку файла F</.autorelabel> на образі, щоб дію зі зміни міток було заплановано на наступне завантаження образу.
-
-Вам слід використовувати цей параметр лише для гостьових систем із підтримкою SELinux.
+This is a compatibility option that does nothing.
 
 =item B<--sm-attach> ВАРІАНТ (див. C<customize> нижче)
 
index f041119d756a009e53f8dda61b22b661fda59da8..2ee61f7c79ecd983402c4a60939d7e5d152e510e 100644 (file)
@@ -429,6 +429,12 @@ Remove the Kerberos host keytab file in the guest.
 
 =back
 
+=head2 B<lvm-system-devices> *
+
+Remove LVM2 system.devices file.
+
+On Linux guests, LVM2's scanning for physical volumes (PVs) may be restricted to those block devices whose WWIDs are listed in C</etc/lvm/devices/system.devices>.  When cloning VMs, WWIDs may change, breaking C<lvm pvscan>.  Remove C</etc/lvm/devices/system.devices>.
+
 =head2 B<lvm-uuids> *
 
 Змінити UUID ФТ і ГТ LVM2.
index 15dc4e9e800b8aad01c5323bbc6993dc0b196790..087c51e04f31e224f640c30a4a77ed1374f1f84f 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Podwrapper::Man 1.48.3 (Pod::Simple 3.43)
+.\" Automatically generated by Podwrapper::Man 1.50.0 (Pod::Simple 3.43)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -71,7 +71,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-alignment-scan 1"
-.TH virt-alignment-scan 1 "2023-01-11" "guestfs-tools-1.48.3" "Virtualization Support"
+.TH virt-alignment-scan 1 "2023-02-07" "guestfs-tools-1.50.0" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index 2c93734660ead150d1eab569e963b72663d682ec..84e81055c05e65d8b2b60bbf68eac5ec991fb750 100644 (file)
@@ -163,5 +163,5 @@ Cédric Bosdonnat L<mailto:cbosdonnat@suse.com>
 
 =head1 АВТОРСЬКІ ПРАВА
 
-Copyright (C) 2016-2020 SUSE Inc.
+Copyright (C) 2016-2023 SUSE Inc.
 
index 6826050d9b4a945f86eecf400d614fcf93e02765..22d5a7c400a3fa65c07be05c95eea149bfa0a4fc 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Podwrapper::Man 1.48.3 (Pod::Simple 3.43)
+.\" Automatically generated by Podwrapper::Man 1.50.0 (Pod::Simple 3.43)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -71,7 +71,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-builder 1"
-.TH virt-builder 1 "2023-01-11" "guestfs-tools-1.48.3" "Virtualization Support"
+.TH virt-builder 1 "2023-02-07" "guestfs-tools-1.50.0" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -193,12 +193,6 @@ Virt-builder — інструмент для швидкого збирання 
 .Vb 1
 \& virt\-builder debian\-7 \-\-update
 .Ve
-.PP
-Для гостьових систем, де використовується SELinux, зокрема Fedora і Red Hat Enterprise Linux, може знадобитися зміна міток SELinux після встановлення або оновлення пакунків (див. \*(L"\s-1SELINUX\*(R"\s0 нижче):
-.PP
-.Vb 1
-\& virt\-builder fedora\-27 \-\-update \-\-selinux\-relabel
-.Ve
 .SS "Налаштовування встановленої системи"
 .IX Subsection "Налаштовування встановленої системи"
 Передбачено багато параметрів, за допомогою яких ви можете налаштувати встановлення. Це зокрема параметр \fI\-\-run\fR/\fI\-\-run\-command\fR, за допомогою якого можна виконати скрипт оболонки або команду під час створення образу диска і додати або змінити файли, які буде включено до образу диска. За допомогою параметра \fI\-\-firstboot\fR/\fI\-\-firstboot\-command\fR можна додати скрипти або команди, які буде виконано під час першого завантаження гостьової системи. За допомогою параметра \fI\-\-edit\fR можна редагувати файли, а параметра \fI\-\-upload\fR — вивантажувати файли до образу.
@@ -618,6 +612,34 @@ Wrap error, warning, and informative messages.  This is the default when the out
 .IP "\fB\-\-hostname\fR НАЗВА_ВУЗЛА" 4
 .IX Item "--hostname НАЗВА_ВУЗЛА"
 Встановити як назву вузла гостьової системи значення \f(CW\*(C`НАЗВА_ВУЗЛА\*(C'\fR. Якщо потрібно, можете скористатися форматом із крапкою, «назва_вузла.назва_домену» (\s-1FQDN\s0).
+.IP "\fB\-\-inject\-qemu\-ga\fR \s-1METHOD\s0" 4
+.IX Item "--inject-qemu-ga METHOD"
+Inject the \s-1QEMU\s0 Guest Agent into a Windows guest.  The guest agent communicates with qemu through a socket in order to provide enhanced features (see \fBqemu\-ga\fR\|(8)).  This operation also injects a firstboot script so that the Guest Agent is installed when the guest boots.
+.Sp
+The parameter is the same as used by the \fI\-\-inject\-virtio\-win\fR operation.
+.Sp
+Note that to do a full conversion of a Windows guest from a foreign hypervisor like VMware (which involves many other operations)  you should use the \fBvirt\-v2v\fR\|(1) tool instead of this.
+.IP "\fB\-\-inject\-virtio\-win\fR \s-1METHOD\s0" 4
+.IX Item "--inject-virtio-win METHOD"
+Inject virtio-win drivers into a Windows guest.  These drivers add virtio accelerated drivers suitable when running on top of a hypervisor that supports virtio (such as qemu/KVM).  The operation also adjusts the Windows Registry so that the drivers are installed when the guest boots.
+.Sp
+The parameter can be one of:
+.RS 4
+.IP "\s-1ISO\s0" 4
+.IX Item "ISO"
+The path to the \s-1ISO\s0 image containing the virtio-win drivers (eg. \fI/usr/share/virtio\-win/virtio\-win.iso\fR).
+.IP "\s-1DIR\s0" 4
+.IX Item "DIR"
+The directory containing the unpacked virtio-win drivers (eg. \fI/usr/share/virtio\-win\fR).
+.ie n .IP "\fB""osinfo""\fR" 4
+.el .IP "\fB``osinfo''\fR" 4
+.IX Item "osinfo"
+The literal string \f(CW"osinfo"\fR means to use the libosinfo database to locate the drivers.  (See \fBosinfo\-query\fR\|(1).
+.RE
+.RS 4
+.Sp
+Note that to do a full conversion of a Windows guest from a foreign hypervisor like VMware (which involves many other operations)  you should use the \fBvirt\-v2v\fR\|(1) tool instead of this.
+.RE
 .IP "\fB\-\-install\fR ПАКУНОК,ПАКУНОК.." 4
 .IX Item "--install ПАКУНОК,ПАКУНОК.."
 Встановити іменовані пакунки (список значень, відокремлених комами). Ці пакунки буде встановлено під час збирання образу за допомогою програми для керування пакунків гостьової системи (наприклад, apt, yum тощо) і з'єднання із мережею основної системи.
@@ -643,6 +665,13 @@ Wrap error, warning, and informative messages.  This is the default when the out
 Витерти \f(CW\*(C`builder.log\*(C'\fR (файл журналу із командами збирання) з образу після завершення збирання. Якщо ви не хочете явним чином показувати, як було зібрано образ, скористайтеся цим параметром.
 .Sp
 Див. також \*(L"\s-1LOG FILE\*(R"\s0.
+.IP "\fB\-\-no\-selinux\-relabel\fR" 4
+.IX Item "--no-selinux-relabel"
+Do not attempt to correct the SELinux labels of files in the guest.
+.Sp
+In such guests that support SELinux, customization automatically relabels files so that they have the correct SELinux label.  (The relabeling is performed immediately, but if the operation fails, customization will instead touch \fI/.autorelabel\fR on the image to schedule a relabel operation for the next time the image boots.)  This option disables the automatic relabeling.
+.Sp
+The option is a no-op for guests that do not support SELinux.
 .IP "\fB\-\-password\fR КОРИСТУВАЧ:ВАРІАНТ" 4
 .IX Item "--password КОРИСТУВАЧ:ВАРІАНТ"
 Встановити пароль для користувача \f(CW\*(C`КОРИСТУВАЧ\*(C'\fR. (Зауважте, що за допомогою цього параметра \fIне можна\fR створювати облікові записи користувачів.)
@@ -699,11 +728,7 @@ Wrap error, warning, and informative messages.  This is the default when the out
 .RE
 .IP "\fB\-\-selinux\-relabel\fR" 4
 .IX Item "--selinux-relabel"
-Повторно встановити мітки для файлів у гостьовій системі так, щоб вони були правильними з точки зору SELinux.
-.Sp
-Якщо буде використано цей параметр, програма спробує змінити мітки файлів негайно, але якщо цього зробити не вдасться, вона змінить часову мітку файла \fI/.autorelabel\fR на образі, щоб дію зі зміни міток було заплановано на наступне завантаження образу.
-.Sp
-Вам слід використовувати цей параметр лише для гостьових систем із підтримкою SELinux.
+This is a compatibility option that does nothing.
 .IP "\fB\-\-sm\-attach\fR ВАРІАНТ" 4
 .IX Item "--sm-attach ВАРІАНТ"
 Долучити систему до буфера передплати за допомогою \f(CW\*(C`subscription\-manager\*(C'\fR.
@@ -1073,7 +1098,7 @@ Wrap error, warning, and informative messages.  This is the default when the out
 .IP "\(bu" 4
 Виконується налаштовування гостьової системи у порядку, який задається рядком команди.
 .IP "\(bu" 4
-Виконується зміна міток SELinux виконано (\fI\-\-selinux\-relabel\fR).
+SELinux relabelling is done unless disabled with \fI\-\-no\-selinux\-relabel\fR.
 .SS "ІМПОРТУВАННЯ ОБРАЗУ ДИСКА"
 .IX Subsection "ІМПОРТУВАННЯ ОБРАЗУ ДИСКА"
 \fIІмпортування до libvirt\fR
@@ -1148,15 +1173,14 @@ Wrap error, warning, and informative messages.  This is the default when the out
 .PP
 Типовою командою virt-builder буде:
 .PP
-.Vb 8
+.Vb 7
 \& virt\-builder fedora\-27 \e
 \&   \-\-hostname client.example.com \e
 \&   \-\-update \e
 \&   \-\-install puppet \e
 \&   \-\-append\-line \*(Aq/etc/puppet/puppet.conf:[agent]\*(Aq \e
 \&   \-\-append\-line \*(Aq/etc/puppet/puppet.conf:server = puppetmaster.example.com/\*(Aq \e
-\&   \-\-run\-command \*(Aqsystemctl enable puppet\*(Aq \e
-\&   \-\-selinux\-relabel
+\&   \-\-run\-command \*(Aqsystemctl enable puppet\*(Aq
 .Ve
 .PP
 Точний перелік настанов залежить від дистрибутива Linux. Докладніше про це тут: https://docs.puppet.com/puppet/latest/install_pre.html
@@ -1672,18 +1696,16 @@ Virt-builder використовує внутрішню реалізацію px
 Гостьові системи, у яких використовується SELinux (зокрема Fedora і Red Hat Enterprise Linux) потребують коректної мітки SELinux для кожного файла.
 .PP
 Virt-builder не може знайти про спосіб, у який новим файлам надаються мітки. Тому існує дві можливі стратегії, використання яких забезпечує встановлення належних міток:
-.IP "Користування \fI\-\-selinux\-relabel\fR" 4
-.IX Item "Користування --selinux-relabel"
+.IP "Automatic relabeling" 4
+.IX Item "Automatic relabeling"
 Запуск \fBsetfiles\fR\|(8) безпосередньо перед завершенням збирання образу гостьової системи для встановлення належних міток SELinux на образі диска.
 .Sp
 Це рекомендований метод.
-.IP "\fI\-\-touch\fR \fI/.autorelabel\fR" 4
-.IX Item "--touch /.autorelabel"
+.IP "Using \fI\-\-no\-selinux\-relabel\fR \fI\-\-touch\fR \fI/.autorelabel\fR" 4
+.IX Item "Using --no-selinux-relabel --touch /.autorelabel"
 Наявність у гостьовій системі файла із назвою \fI/.autorelabel\fR або можливе його створення.
 .Sp
 У гостьових системах, де використовується SELinux, це спричиняє запуск \fBrestorecon\fR\|(8) під час першого завантаження. Гостьові системи самостійно перезавантажуються під час першого використання — це нормальна і нешкідлива поведінка.
-.PP
-Будь ласка, зауважте, що якщо у вашій гостьовій системі використовується SELinux, і ви виконуєте над цією системою дії, які можуть призвести до створення файлів або внесення змін до наявних файлів, варто скористатися \fI\-\-selinux\-relabel\fR. Так можна забезпечити встановлення належних міток SELinux для цих файлів.
 .SH "ПРИДАТНЕ ДО ЧИТАННЯ КОМП'ЮТЕРОМ ВИВЕДЕННЯ"
 .IX Header "ПРИДАТНЕ ДО ЧИТАННЯ КОМП'ЮТЕРОМ ВИВЕДЕННЯ"
 Для виведення даних у зручному для машинної обробки форматі можна скористатися параметром \fI\-\-machine\-readable\fR. Додавання цього параметра робить зручним використання virt-builder з інших програм, графічних інтерфейсів тощо.
index 10c9ebcd61f031f2742b80eb06a572e0a3ad723f..7311b2f53db19171c28fc02809980d892c5d94b1 100644 (file)
@@ -106,10 +106,6 @@ Virt-builder — інструмент для швидкого збирання 
 
  virt-builder debian-7 --update
 
-Для гостьових систем, де використовується SELinux, зокрема Fedora і Red Hat Enterprise Linux, може знадобитися зміна міток SELinux після встановлення або оновлення пакунків (див. L</SELINUX> нижче):
-
- virt-builder fedora-27 --update --selinux-relabel
-
 =head2 Налаштовування встановленої системи
 
 Передбачено багато параметрів, за допомогою яких ви можете налаштувати встановлення. Це зокрема параметр I<--run>/I<--run-command>, за допомогою якого можна виконати скрипт оболонки або команду під час створення образу диска і додати або змінити файли, які буде включено до образу диска. За допомогою параметра I<--firstboot>/I<--firstboot-command> можна додати скрипти або команди, які буде виконано під час першого завантаження гостьової системи. За допомогою параметра I<--edit> можна редагувати файли, а параметра I<--upload> — вивантажувати файли до образу.
@@ -762,7 +758,7 @@ I<--sm-remove> вилучає усі передплати з гостьової
 
 =item *
 
-Виконується зміна міток SELinux виконано (I<--selinux-relabel>).
+SELinux relabelling is done unless disabled with I<--no-selinux-relabel>.
 
 =back
 
@@ -843,8 +839,7 @@ I<--sm-remove> вилучає усі передплати з гостьової
    --install puppet \
    --append-line '/etc/puppet/puppet.conf:[agent]' \
    --append-line '/etc/puppet/puppet.conf:server = puppetmaster.example.com/' \
-   --run-command 'systemctl enable puppet' \
-   --selinux-relabel
+   --run-command 'systemctl enable puppet'
 
 Точний перелік настанов залежить від дистрибутива Linux. Докладніше про це тут: L<https://docs.puppet.com/puppet/latest/install_pre.html>
 
@@ -1347,13 +1342,13 @@ Virt-builder не може знайти про спосіб, у який нов
 
 =over 4
 
-=item Користування I<--selinux-relabel>
+=item Automatic relabeling
 
 Запуск L<setfiles(8)> безпосередньо перед завершенням збирання образу гостьової системи для встановлення належних міток SELinux на образі диска.
 
 Це рекомендований метод.
 
-=item I<--touch> F</.autorelabel>
+=item Using I<--no-selinux-relabel> I<--touch> F</.autorelabel>
 
 Наявність у гостьовій системі файла із назвою F</.autorelabel> або можливе його створення.
 
@@ -1361,8 +1356,6 @@ Virt-builder не може знайти про спосіб, у який нов
 
 =back
 
-Будь ласка, зауважте, що якщо у вашій гостьовій системі використовується SELinux, і ви виконуєте над цією системою дії, які можуть призвести до створення файлів або внесення змін до наявних файлів, варто скористатися I<--selinux-relabel>. Так можна забезпечити встановлення належних міток SELinux для цих файлів.
-
 =head1 ПРИДАТНЕ ДО ЧИТАННЯ КОМП'ЮТЕРОМ ВИВЕДЕННЯ
 
 Для виведення даних у зручному для машинної обробки форматі можна скористатися параметром I<--machine-readable>. Додавання цього параметра робить зручним використання virt-builder з інших програм, графічних інтерфейсів тощо.
index df923432f22213533f0bfccece6a8cb2ec7f8510..2faa6f3f94ece5a4988756b9d97ea8ca2d111809 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Podwrapper::Man 1.48.3 (Pod::Simple 3.43)
+.\" Automatically generated by Podwrapper::Man 1.50.0 (Pod::Simple 3.43)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -71,7 +71,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-cat 1"
-.TH virt-cat 1 "2023-01-11" "guestfs-tools-1.48.3" "Virtualization Support"
+.TH virt-cat 1 "2023-02-07" "guestfs-tools-1.50.0" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -218,6 +218,15 @@ Use the specified \f(CW\*(C`KEY_STRING\*(C'\fR as passphrase.
 .el .IP "\fB\-\-key\fR \f(CWID\fR:file:FILENAME" 4
 .IX Item "--key ID:file:FILENAME"
 Read the passphrase from \fI\s-1FILENAME\s0\fR.
+.ie n .IP "\fB\-\-key\fR ""ID"":clevis" 4
+.el .IP "\fB\-\-key\fR \f(CWID\fR:clevis" 4
+.IX Item "--key ID:clevis"
+Attempt passphrase-less unlocking for \f(CW\*(C`ID\*(C'\fR with Clevis, over the
+network.  Please refer to \*(L"\s-1ENCRYPTED DISKS\*(R"\s0 in \fBguestfs\fR\|(3) for more
+information on network-bound disk encryption (\s-1NBDE\s0).
+.Sp
+Note that if any such option is present on the command line, \s-1QEMU\s0 user
+networking will be automatically enabled for the libguestfs appliance.
 .RE
 .RS 4
 .RE
@@ -337,7 +346,7 @@ multiple keys on stdin, one per line.
 Richard W.M. Jones http://people.redhat.com/~rjones/
 .SH "АВТОРСЬКІ ПРАВА"
 .IX Header "АВТОРСЬКІ ПРАВА"
-© Red Hat Inc., 2010–2012
+Copyright (C) 2010\-2023 Red Hat Inc.
 .SH "LICENSE"
 .IX Header "LICENSE"
 .SH "BUGS"
index 4895692a798f3509c08f9d8f486de4b026ac39fb..a8bb3517344be55582834def2eb372343b2cf4b2 100644 (file)
@@ -231,5 +231,5 @@ Richard W.M. Jones L<http://people.redhat.com/~rjones/>
 
 =head1 АВТОРСЬКІ ПРАВА
 
-© Red Hat Inc., 2010–2012
+Copyright (C) 2010-2023 Red Hat Inc.
 
index 8e24185549e7919d292811775e83c255b3d2d8a0..484460c952b49ec92d12950ee8e792594c8a5d7b 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Podwrapper::Man 1.48.3 (Pod::Simple 3.43)
+.\" Automatically generated by Podwrapper::Man 1.50.0 (Pod::Simple 3.43)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -71,7 +71,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-customize 1"
-.TH virt-customize 1 "2023-01-11" "guestfs-tools-1.48.3" "Virtualization Support"
+.TH virt-customize 1 "2023-02-07" "guestfs-tools-1.50.0" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -209,6 +209,15 @@ Use the specified \f(CW\*(C`KEY_STRING\*(C'\fR as passphrase.
 .el .IP "\fB\-\-key\fR \f(CWID\fR:file:FILENAME" 4
 .IX Item "--key ID:file:FILENAME"
 Read the passphrase from \fI\s-1FILENAME\s0\fR.
+.ie n .IP "\fB\-\-key\fR ""ID"":clevis" 4
+.el .IP "\fB\-\-key\fR \f(CWID\fR:clevis" 4
+.IX Item "--key ID:clevis"
+Attempt passphrase-less unlocking for \f(CW\*(C`ID\*(C'\fR with Clevis, over the
+network.  Please refer to \*(L"\s-1ENCRYPTED DISKS\*(R"\s0 in \fBguestfs\fR\|(3) for more
+information on network-bound disk encryption (\s-1NBDE\s0).
+.Sp
+Note that if any such option is present on the command line, \s-1QEMU\s0 user
+networking will be automatically enabled for the libguestfs appliance.
 .RE
 .RS 4
 .RE
@@ -407,6 +416,34 @@ Wrap error, warning, and informative messages.  This is the default when the out
 .IP "\fB\-\-hostname\fR НАЗВА_ВУЗЛА" 4
 .IX Item "--hostname НАЗВА_ВУЗЛА"
 Встановити як назву вузла гостьової системи значення \f(CW\*(C`НАЗВА_ВУЗЛА\*(C'\fR. Якщо потрібно, можете скористатися форматом із крапкою, «назва_вузла.назва_домену» (\s-1FQDN\s0).
+.IP "\fB\-\-inject\-qemu\-ga\fR \s-1METHOD\s0" 4
+.IX Item "--inject-qemu-ga METHOD"
+Inject the \s-1QEMU\s0 Guest Agent into a Windows guest.  The guest agent communicates with qemu through a socket in order to provide enhanced features (see \fBqemu\-ga\fR\|(8)).  This operation also injects a firstboot script so that the Guest Agent is installed when the guest boots.
+.Sp
+The parameter is the same as used by the \fI\-\-inject\-virtio\-win\fR operation.
+.Sp
+Note that to do a full conversion of a Windows guest from a foreign hypervisor like VMware (which involves many other operations)  you should use the \fBvirt\-v2v\fR\|(1) tool instead of this.
+.IP "\fB\-\-inject\-virtio\-win\fR \s-1METHOD\s0" 4
+.IX Item "--inject-virtio-win METHOD"
+Inject virtio-win drivers into a Windows guest.  These drivers add virtio accelerated drivers suitable when running on top of a hypervisor that supports virtio (such as qemu/KVM).  The operation also adjusts the Windows Registry so that the drivers are installed when the guest boots.
+.Sp
+The parameter can be one of:
+.RS 4
+.IP "\s-1ISO\s0" 4
+.IX Item "ISO"
+The path to the \s-1ISO\s0 image containing the virtio-win drivers (eg. \fI/usr/share/virtio\-win/virtio\-win.iso\fR).
+.IP "\s-1DIR\s0" 4
+.IX Item "DIR"
+The directory containing the unpacked virtio-win drivers (eg. \fI/usr/share/virtio\-win\fR).
+.ie n .IP "\fB""osinfo""\fR" 4
+.el .IP "\fB``osinfo''\fR" 4
+.IX Item "osinfo"
+The literal string \f(CW"osinfo"\fR means to use the libosinfo database to locate the drivers.  (See \fBosinfo\-query\fR\|(1).
+.RE
+.RS 4
+.Sp
+Note that to do a full conversion of a Windows guest from a foreign hypervisor like VMware (which involves many other operations)  you should use the \fBvirt\-v2v\fR\|(1) tool instead of this.
+.RE
 .IP "\fB\-\-install\fR ПАКУНОК,ПАКУНОК.." 4
 .IX Item "--install ПАКУНОК,ПАКУНОК.."
 Встановити іменовані пакунки (список значень, відокремлених комами). Ці пакунки буде встановлено під час збирання образу за допомогою програми для керування пакунків гостьової системи (наприклад, apt, yum тощо) і з'єднання із мережею основної системи.
@@ -432,6 +469,13 @@ Wrap error, warning, and informative messages.  This is the default when the out
 Витерти \f(CW\*(C`builder.log\*(C'\fR (файл журналу із командами збирання) з образу після завершення збирання. Якщо ви не хочете явним чином показувати, як було зібрано образ, скористайтеся цим параметром.
 .Sp
 Див. також \*(L"\s-1LOG FILE\*(R"\s0.
+.IP "\fB\-\-no\-selinux\-relabel\fR" 4
+.IX Item "--no-selinux-relabel"
+Do not attempt to correct the SELinux labels of files in the guest.
+.Sp
+In such guests that support SELinux, customization automatically relabels files so that they have the correct SELinux label.  (The relabeling is performed immediately, but if the operation fails, customization will instead touch \fI/.autorelabel\fR on the image to schedule a relabel operation for the next time the image boots.)  This option disables the automatic relabeling.
+.Sp
+The option is a no-op for guests that do not support SELinux.
 .IP "\fB\-\-password\fR КОРИСТУВАЧ:ВАРІАНТ" 4
 .IX Item "--password КОРИСТУВАЧ:ВАРІАНТ"
 Встановити пароль для користувача \f(CW\*(C`КОРИСТУВАЧ\*(C'\fR. (Зауважте, що за допомогою цього параметра \fIне можна\fR створювати облікові записи користувачів.)
@@ -488,11 +532,7 @@ Wrap error, warning, and informative messages.  This is the default when the out
 .RE
 .IP "\fB\-\-selinux\-relabel\fR" 4
 .IX Item "--selinux-relabel"
-Повторно встановити мітки для файлів у гостьовій системі так, щоб вони були правильними з точки зору SELinux.
-.Sp
-Якщо буде використано цей параметр, програма спробує змінити мітки файлів негайно, але якщо цього зробити не вдасться, вона змінить часову мітку файла \fI/.autorelabel\fR на образі, щоб дію зі зміни міток було заплановано на наступне завантаження образу.
-.Sp
-Вам слід використовувати цей параметр лише для гостьових систем із підтримкою SELinux.
+This is a compatibility option that does nothing.
 .IP "\fB\-\-sm\-attach\fR ВАРІАНТ" 4
 .IX Item "--sm-attach ВАРІАНТ"
 Долучити систему до буфера передплати за допомогою \f(CW\*(C`subscription\-manager\*(C'\fR.
@@ -595,7 +635,7 @@ Wrap error, warning, and informative messages.  This is the default when the out
 Richard W.M. Jones http://people.redhat.com/~rjones/
 .SH "АВТОРСЬКІ ПРАВА"
 .IX Header "АВТОРСЬКІ ПРАВА"
-Copyright (C) 2011\-2020 Red Hat Inc.
+Copyright (C) 2011\-2023 Red Hat Inc.
 .SH "LICENSE"
 .IX Header "LICENSE"
 This program is free software; you can redistribute it and/or modify it
index 2e9e6b92d7f2007afd0a3e8249416cf572d71588..e9d54ebff8a15fdb2a9c48528e44c70bd9d97108 100644 (file)
@@ -249,5 +249,5 @@ Richard W.M. Jones L<http://people.redhat.com/~rjones/>
 
 =head1 АВТОРСЬКІ ПРАВА
 
-Copyright (C) 2011-2020 Red Hat Inc.
+Copyright (C) 2011-2023 Red Hat Inc.
 
index bf9eed279fa6084b59cbf494752f8a4e1dced5a1..b6608ce86b8fb5296c8bb75af879e76806722975 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Podwrapper::Man 1.48.3 (Pod::Simple 3.43)
+.\" Automatically generated by Podwrapper::Man 1.50.0 (Pod::Simple 3.43)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -71,7 +71,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-df 1"
-.TH virt-df 1 "2023-01-11" "guestfs-tools-1.48.3" "Virtualization Support"
+.TH virt-df 1 "2023-02-07" "guestfs-tools-1.50.0" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -309,13 +309,13 @@ default value which is usually 512 bytes.  See also
 Ця програма повертає значення 0 у разі успішного завершення і ненульове значення, якщо сталася помилка.
 .SH "ТАКОЖ ПЕРЕГЛЯНЬТЕ"
 .IX Header "ТАКОЖ ПЕРЕГЛЯНЬТЕ"
-\&\fBdf\fR\|(1), \fBguestfs\fR\|(3), \fBguestfish\fR\|(1), \fBvirt\-filesystems\fR\|(1), http://libguestfs.org/.
+\&\fBdf\fR\|(1), \fBguestfs\fR\|(3), \fBguestfish\fR\|(1), \fBvirt\-drivers\fR\|(1), \fBvirt\-filesystems\fR\|(1), http://libguestfs.org/.
 .SH "АВТОР"
 .IX Header "АВТОР"
 Richard W.M. Jones http://people.redhat.com/~rjones/
 .SH "АВТОРСЬКІ ПРАВА"
 .IX Header "АВТОРСЬКІ ПРАВА"
-Copyright (C) 2009\-2020 Red Hat Inc.
+Copyright (C) 2009\-2023 Red Hat Inc.
 .SH "LICENSE"
 .IX Header "LICENSE"
 .SH "BUGS"
index 851890c26034b723f6e07c249449ddee31ab08f5..89bd13a81f409456efc2a1ad341920b981c08176 100644 (file)
@@ -211,7 +211,7 @@ C<virt-df> (і L<df(1)>) отримує інформацію, виконуючи
 
 =head1 ТАКОЖ ПЕРЕГЛЯНЬТЕ
 
-L<df(1)>, L<guestfs(3)>, L<guestfish(1)>, L<virt-filesystems(1)>, L<http://libguestfs.org/>.
+L<df(1)>, L<guestfs(3)>, L<guestfish(1)>, L<virt-drivers(1)>, L<virt-filesystems(1)>, L<http://libguestfs.org/>.
 
 =head1 АВТОР
 
@@ -219,5 +219,5 @@ Richard W.M. Jones L<http://people.redhat.com/~rjones/>
 
 =head1 АВТОРСЬКІ ПРАВА
 
-Copyright (C) 2009-2020 Red Hat Inc.
+Copyright (C) 2009-2023 Red Hat Inc.
 
index 1265d4c97b2571a2ad011544cba6d3589348f955..d4a06c4a0a23352b9e315e088e6f902a8be08e82 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Podwrapper::Man 1.48.3 (Pod::Simple 3.43)
+.\" Automatically generated by Podwrapper::Man 1.50.0 (Pod::Simple 3.43)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -71,7 +71,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-dib 1"
-.TH virt-dib 1 "2023-01-11" "guestfs-tools-1.48.3" "Virtualization Support"
+.TH virt-dib 1 "2023-02-07" "guestfs-tools-1.50.0" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index 8956504e0ba24b4a7b40eb9a22b94172d72e9cc9..d44c64c2e6de60fb4299d056c72d5162308a051c 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Podwrapper::Man 1.48.3 (Pod::Simple 3.43)
+.\" Automatically generated by Podwrapper::Man 1.50.0 (Pod::Simple 3.43)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -71,7 +71,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-diff 1"
-.TH virt-diff 1 "2023-01-11" "guestfs-tools-1.48.3" "Virtualization Support"
+.TH virt-diff 1 "2023-02-07" "guestfs-tools-1.50.0" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -237,6 +237,15 @@ Use the specified \f(CW\*(C`KEY_STRING\*(C'\fR as passphrase.
 .el .IP "\fB\-\-key\fR \f(CWID\fR:file:FILENAME" 4
 .IX Item "--key ID:file:FILENAME"
 Read the passphrase from \fI\s-1FILENAME\s0\fR.
+.ie n .IP "\fB\-\-key\fR ""ID"":clevis" 4
+.el .IP "\fB\-\-key\fR \f(CWID\fR:clevis" 4
+.IX Item "--key ID:clevis"
+Attempt passphrase-less unlocking for \f(CW\*(C`ID\*(C'\fR with Clevis, over the
+network.  Please refer to \*(L"\s-1ENCRYPTED DISKS\*(R"\s0 in \fBguestfs\fR\|(3) for more
+information on network-bound disk encryption (\s-1NBDE\s0).
+.Sp
+Note that if any such option is present on the command line, \s-1QEMU\s0 user
+networking will be automatically enabled for the libguestfs appliance.
 .RE
 .RS 4
 .RE
@@ -317,7 +326,7 @@ multiple keys on stdin, one per line.
 Richard W.M. Jones http://people.redhat.com/~rjones/
 .SH "АВТОРСЬКІ ПРАВА"
 .IX Header "АВТОРСЬКІ ПРАВА"
-Copyright (C) 2009\-2020 Red Hat Inc.
+Copyright (C) 2009\-2023 Red Hat Inc.
 .SH "LICENSE"
 .IX Header "LICENSE"
 .SH "BUGS"
index 8fc63f754af0af282b09405162c4b7509c7eb39e..56eb86122d547fef366e23cf049cb597fa825cd3 100644 (file)
@@ -212,5 +212,5 @@ Richard W.M. Jones L<http://people.redhat.com/~rjones/>
 
 =head1 АВТОРСЬКІ ПРАВА
 
-Copyright (C) 2009-2020 Red Hat Inc.
+Copyright (C) 2009-2023 Red Hat Inc.
 
diff --git a/po-docs/uk/virt-drivers.pod b/po-docs/uk/virt-drivers.pod
new file mode 100644 (file)
index 0000000..2db48ae
--- /dev/null
@@ -0,0 +1,205 @@
+
+=head1 НАЗВА
+
+virt-drivers - Detect bootloader, kernel and drivers inside guest
+
+=head1 КОРОТКИЙ ОПИС
+
+ virt-drivers [--options] -d domname
+
+ virt-drivers [--options] -a disk.img
+
+=head1 ОПИС
+
+This tool can detect the bootloader, kernel and drivers inside some guests from only the disk image.  It can detect, for example, whether a disk image needs BIOS or UEFI to boot, and whether it supports virtio or requires slower emulated devices.
+
+=head2 Notes
+
+Normally you should distribute hypervisor metadata (eg. libvirt XML or OVF) alongside disk images to tell the hypervisor how to boot them.  This tool is used when this metadata has not been provided.  Work with the supplier of the disk image to get them to provide proper metadata.
+
+=head1 ФОРМАТ XML
+
+The output is an XML document.  At the top level it lists the operating systems found (the same as L<virt-inspector(1)>):
+
+ <operatingsystems>
+   <operatingsystem>
+     <root>/dev/sda2</root>
+     <name>linux</name>
+     <arch>x86_64</arch>
+     <distro>fedora</distro>
+     ...
+   </operatingsystem>
+   <operatingsystem>
+     <root>/dev/sdb1</root>
+     ...
+   </operatingsystem>
+ </operatingsystems>
+
+=head2 E<lt>firmwareE<gt>
+
+The E<lt>firmwareE<gt> element lists the firmware which is required to boot the guest.  For UEFI it will additionally show the EFI system partition ("ESP").  Guests may support multiple boot firmwares.  For example this guest is detected as using UEFI boot, and the UEFI ESP is the first partition of the first disk:
+
+ <operatingsystems>
+   <firmware type='uefi'>/dev/sda1</firmware>
+   <operatingsystem>
+     ...
+
+=head2 E<lt>bootloaderE<gt> and E<lt>kernelE<gt>
+
+The E<lt>bootloaderE<gt> element shows the bootloader found in the Linux guest.  If known, this may contain information about what Linux kernels are provided.  For example:
+
+ <operatingsystems>
+   <firmware type='bios'/>
+   <operatingsystem>
+     <root>/dev/sda2</root>
+     <name>linux</name>
+     ...
+     <bootloader type='grub2' config='/boot/grub2/grub.cfg'>
+       <kernel>
+         <name>kernel</name>
+         <version>6.1.0-0.rc6.46.fc38.x86_64</version>
+         <vmlinuz>/boot/vmlinuz-6.1.0-0.rc6.46.fc38.x86_64</vmlinuz>
+         <modules>
+           ...
+         </modules>
+         <supports_virtio_blk/>
+         <supports_virtio_net/>
+         ...
+       </kernel>
+     </bootloader>
+
+Many more fields are usually available for Linux guests, including a complete list of kernel modules and information about support for virtio. For a complete example see: L<https://github.com/rwmjones/guestfs-tools/tree/master/drivers>
+
+=head2 E<lt>driversE<gt>
+
+The E<lt>driversE<gt> element lists information about drivers found in Windows guests:
+
+ <operatingsystems>
+   <firmware type='bios'/>
+   <operatingsystem>
+     <root>/dev/sda2</root>
+     <name>windows</name>
+     ...
+     <drivers>
+       <driver>
+         <name>scsidev</name>
+         <pci vendor='1077' device='1216' subsystem='8471101E'/>
+         <pci vendor='1077' device='1216' subsystem='8493101E'/>
+       </driver>
+       ...
+     </drivers>
+
+The driver name (eg. C<scsidev>) corresponds to the Windows driver F<.INF> file (eg. F<scsidev.inf>).  The list of PCI, USB etc devices are the matching devices which would cause this driver to load at boot.
+
+=head1 ПАРАМЕТРИ
+
+=over 4
+
+=item B<--help>
+
+Показати довідкове повідомлення.
+
+=item B<-a> файл
+
+=item B<--add> файл
+
+Додати I<файл>, який має бути образом диска з віртуальної машини.
+
+Формат образу диска визначається автоматично. Щоб перевизначити його і примусово використати певний формат, скористайтеся параметром I<--format>.
+
+=item B<-a> адреса
+
+=item B<--add> адреса
+
+Додати віддалений диск. Формат адреси є сумісним із guestfish. Див. L<guestfish(1)/ДОДАВАННЯ ВІДДАЛЕНОГО СХОВИЩА>.
+
+=item B<--blocksize> B<512>
+
+=item B<--blocksize> B<4096>
+
+This parameter sets the sector size of the disk image added with I<-a> option and is ignored for libvirt guest added with I<-d> option.  See also L<guestfs(3)/guestfs_add_drive_opts>.
+
+=item B<--colors>
+
+=item B<--colours>
+
+Використовувати послідовності символів ANSI для розфарбовування повідомлень. Ці послідовності типово використовуються, якщо дані виводяться на термінал tty.  Якщо дані, виведені програмою, спрямовуються до файла, послідовності визначення кольорів ANSI буде вимкнено, якщо ви не додасте до команди цей параметр.
+
+=item B<-c> адреса
+
+=item B<--connect> адреса
+
+Якщо використовується libvirt, встановити з’єднання з вказаним I<URI>. Якщо пропущено, з’єднання буде встановлено з типовим гіпервізором libvirt.
+
+Якщо вказати блокові пристрої гостьових систем безпосередньо (I<-a>), libvirt не буде використовуватися взагалі.
+
+=item B<-d> гість
+
+=item B<--domain> гість
+
+Додати всі диски з вказаної гостьової системи libvirt. UUID доменів можна використовувати замість назв.
+
+=item B<--echo-keys>
+
+Типово, якщо virt-get-kernel попросить вас ввести ключ або пароль, програма не відтворюватиме введені символи на екрані. Якщо ви не боїтеся TEMPEST-нападів, або у вашій кімнаті нікого, окрім вас, немає, ви можете скористатися цим прапорцем, щоб бачити, які саме символи ви вводите.
+
+=item B<--format> raw|qcow2|..
+
+=item B<--format> auto
+
+Типовим значенням для параметра I<-a> є автоматичне визначення формату образу диска. Використання цього параметра примусово визначає значення параметрів I<-a> формату диска у рядку команди.
+
+Якщо ви користуєтеся ненадійними образами гостьових систем у необробленому форматі, вам слід скористатися цим параметром для визначення формату диска. Таким чином можна уникнути можливих проблем з захистом для сформованих зловмисниками гостьових систем (CVE-2010-3851).
+
+__INCLUDE:key-option.pod__
+
+__INCLUDE:keys-from-stdin-option.pod__
+
+=item B<-q>
+
+=item B<--quiet>
+
+Не виводити звичайних повідомлень щодо поступу.
+
+=item B<-v>
+
+=item B<--verbose>
+
+Увімкнути докладний показ повідомлень з метою діагностики.
+
+=item B<-V>
+
+=item B<--version>
+
+Показати дані щодо версії і завершити роботу.
+
+=item B<--wrap>
+
+Wrap error, warning, and informative messages.  This is the default when the output is a tty.  If the output of the program is redirected to a file, wrapping is disabled unless you use this option.
+
+=item B<-x>
+
+Увімкнути трасування викликів програмного інтерфейсу libguestfs.
+
+=back
+
+=head1 ЗМІННІ СЕРЕДОВИЩА
+
+Опис інших змінних середовища, які стосуються усіх програм libguestfs, наведено у розділі L<guestfs(3)/ЗМІННІ СЕРЕДОВИЩА>.
+
+=head1 СТАН ВИХОДУ
+
+Ця програма повертає значення 0 у разі успішного завершення і ненульове значення, якщо сталася помилка.
+
+=head1 ТАКОЖ ПЕРЕГЛЯНЬТЕ
+
+L<guestfs(3)>, L<guestfish(1)>, L<guestmount(1)>, L<virt-get-kernel(1)>, L<virt-inspector(1)>, L<virt-v2v(1)>, L<http://libguestfs.org/>.
+
+=head1 АВТОР
+
+Richard W.M. Jones L<http://people.redhat.com/~rjones/>
+
+=head1 АВТОРСЬКІ ПРАВА
+
+Copyright (C) 2009-2023 Red Hat Inc.
+
index 32259e028dbbd5d1b226e52924aea40a6b902726..6f5e9dc78ae9b2be82d88b1eaff2413c232e2fc8 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Podwrapper::Man 1.48.3 (Pod::Simple 3.43)
+.\" Automatically generated by Podwrapper::Man 1.50.0 (Pod::Simple 3.43)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -71,7 +71,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-edit 1"
-.TH virt-edit 1 "2023-01-11" "guestfs-tools-1.48.3" "Virtualization Support"
+.TH virt-edit 1 "2023-02-07" "guestfs-tools-1.50.0" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -246,6 +246,15 @@ Use the specified \f(CW\*(C`KEY_STRING\*(C'\fR as passphrase.
 .el .IP "\fB\-\-key\fR \f(CWID\fR:file:FILENAME" 4
 .IX Item "--key ID:file:FILENAME"
 Read the passphrase from \fI\s-1FILENAME\s0\fR.
+.ie n .IP "\fB\-\-key\fR ""ID"":clevis" 4
+.el .IP "\fB\-\-key\fR \f(CWID\fR:clevis" 4
+.IX Item "--key ID:clevis"
+Attempt passphrase-less unlocking for \f(CW\*(C`ID\*(C'\fR with Clevis, over the
+network.  Please refer to \*(L"\s-1ENCRYPTED DISKS\*(R"\s0 in \fBguestfs\fR\|(3) for more
+information on network-bound disk encryption (\s-1NBDE\s0).
+.Sp
+Note that if any such option is present on the command line, \s-1QEMU\s0 user
+networking will be automatically enabled for the libguestfs appliance.
 .RE
 .RS 4
 .RE
@@ -423,7 +432,7 @@ multiple keys on stdin, one per line.
 Richard W.M. Jones http://people.redhat.com/~rjones/
 .SH "АВТОРСЬКІ ПРАВА"
 .IX Header "АВТОРСЬКІ ПРАВА"
-Copyright (C) 2009\-2020 Red Hat Inc.
+Copyright (C) 2009\-2023 Red Hat Inc.
 .SH "LICENSE"
 .IX Header "LICENSE"
 .SH "BUGS"
index ec2e32ef903e48c3d02e87c953bc606c6acc913b..9720f0fc4feb8c792ccde8262191e813896e5794 100644 (file)
@@ -307,5 +307,5 @@ Richard W.M. Jones L<http://people.redhat.com/~rjones/>
 
 =head1 АВТОРСЬКІ ПРАВА
 
-Copyright (C) 2009-2020 Red Hat Inc.
+Copyright (C) 2009-2023 Red Hat Inc.
 
index a1f83d7a425585b181c402abedbbbc6b97d52170..7e1e7da65a377b4f419e2cf03c5c1955b8ce31c8 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Podwrapper::Man 1.48.3 (Pod::Simple 3.43)
+.\" Automatically generated by Podwrapper::Man 1.50.0 (Pod::Simple 3.43)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -71,7 +71,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-filesystems 1"
-.TH virt-filesystems 1 "2023-01-11" "guestfs-tools-1.48.3" "Virtualization Support"
+.TH virt-filesystems 1 "2023-02-07" "guestfs-tools-1.50.0" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -413,13 +413,13 @@ multiple keys on stdin, one per line.
 Ця програма повертає значення 0 у разі успішного завершення і ненульове значення, якщо сталася помилка.
 .SH "ТАКОЖ ПЕРЕГЛЯНЬТЕ"
 .IX Header "ТАКОЖ ПЕРЕГЛЯНЬТЕ"
-\&\fBguestfs\fR\|(3), \fBguestfish\fR\|(1), \fBvirt\-cat\fR\|(1), \fBvirt\-df\fR\|(1), \fBvirt\-list\-filesystems\fR\|(1), \fBvirt\-list\-partitions\fR\|(1), \fBcsvtool\fR\|(1), http://libguestfs.org/.
+\&\fBguestfs\fR\|(3), \fBguestfish\fR\|(1), \fBvirt\-cat\fR\|(1), \fBvirt\-df\fR\|(1), \fBvirt\-drivers\fR\|(1), \fBvirt\-list\-filesystems\fR\|(1), \fBvirt\-list\-partitions\fR\|(1), \fBcsvtool\fR\|(1), http://libguestfs.org/.
 .SH "АВТОР"
 .IX Header "АВТОР"
 Richard W.M. Jones http://people.redhat.com/~rjones/
 .SH "АВТОРСЬКІ ПРАВА"
 .IX Header "АВТОРСЬКІ ПРАВА"
-© Red Hat Inc., 2010–2012
+Copyright (C) 2010\-2023 Red Hat Inc.
 .SH "LICENSE"
 .IX Header "LICENSE"
 .SH "BUGS"
index 322f2112eef3145cf296ead22365669e58308355..912c0940264a6bca985a7e9fca39dd638e3f4eeb 100644 (file)
@@ -313,7 +313,7 @@ UUID буде показано, лише якщо вказано парамет
 
 =head1 ТАКОЖ ПЕРЕГЛЯНЬТЕ
 
-L<guestfs(3)>, L<guestfish(1)>, L<virt-cat(1)>, L<virt-df(1)>, L<virt-list-filesystems(1)>, L<virt-list-partitions(1)>, L<csvtool(1)>, L<http://libguestfs.org/>.
+L<guestfs(3)>, L<guestfish(1)>, L<virt-cat(1)>, L<virt-df(1)>, L<virt-drivers(1)>, L<virt-list-filesystems(1)>, L<virt-list-partitions(1)>, L<csvtool(1)>, L<http://libguestfs.org/>.
 
 =head1 АВТОР
 
@@ -321,5 +321,5 @@ Richard W.M. Jones L<http://people.redhat.com/~rjones/>
 
 =head1 АВТОРСЬКІ ПРАВА
 
-© Red Hat Inc., 2010–2012
+Copyright (C) 2010-2023 Red Hat Inc.
 
index a07b4bd1e2496c5b60f9d0aad947cedf910daa24..59c8553c359f2f455bdbfbcce939500680ed346a 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Podwrapper::Man 1.48.3 (Pod::Simple 3.43)
+.\" Automatically generated by Podwrapper::Man 1.50.0 (Pod::Simple 3.43)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -71,7 +71,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-format 1"
-.TH virt-format 1 "2023-01-11" "guestfs-tools-1.48.3" "Virtualization Support"
+.TH virt-format 1 "2023-02-07" "guestfs-tools-1.50.0" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index b419c9d2ab0ada94adf1299de94f9cb2aefb805f..ed655f0d6a44c856833696760e01e157740bbdaf 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Podwrapper::Man 1.48.3 (Pod::Simple 3.43)
+.\" Automatically generated by Podwrapper::Man 1.50.0 (Pod::Simple 3.43)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -71,7 +71,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-get-kernel 1"
-.TH virt-get-kernel 1 "2023-01-11" "guestfs-tools-1.48.3" "Virtualization Support"
+.TH virt-get-kernel 1 "2023-02-07" "guestfs-tools-1.50.0" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -88,7 +88,7 @@ virt-get-kernel — видобування ядра і диска в пам'ят
 .Ve
 .SH "ОПИС"
 .IX Header "ОПИС"
-За допомогою цього параметра можна видобути ядро та initramfs з гостьової системи.
+This program extracts the kernel and initramfs from a guest.
 .PP
 Формат образу диска буде визначено автоматично, якщо ви не вкажете його за допомогою параметра \fI\-\-format\fR.
 .PP
@@ -170,6 +170,15 @@ Use the specified \f(CW\*(C`KEY_STRING\*(C'\fR as passphrase.
 .el .IP "\fB\-\-key\fR \f(CWID\fR:file:FILENAME" 4
 .IX Item "--key ID:file:FILENAME"
 Read the passphrase from \fI\s-1FILENAME\s0\fR.
+.ie n .IP "\fB\-\-key\fR ""ID"":clevis" 4
+.el .IP "\fB\-\-key\fR \f(CWID\fR:clevis" 4
+.IX Item "--key ID:clevis"
+Attempt passphrase-less unlocking for \f(CW\*(C`ID\*(C'\fR with Clevis, over the
+network.  Please refer to \*(L"\s-1ENCRYPTED DISKS\*(R"\s0 in \fBguestfs\fR\|(3) for more
+information on network-bound disk encryption (\s-1NBDE\s0).
+.Sp
+Note that if any such option is present on the command line, \s-1QEMU\s0 user
+networking will be automatically enabled for the libguestfs appliance.
 .RE
 .RS 4
 .RE
@@ -259,13 +268,13 @@ Wrap error, warning, and informative messages.  This is the default when the out
 Ця програма повертає значення 0 у разі успішного завершення і ненульове значення, якщо сталася помилка.
 .SH "ТАКОЖ ПЕРЕГЛЯНЬТЕ"
 .IX Header "ТАКОЖ ПЕРЕГЛЯНЬТЕ"
-\&\fBguestfs\fR\|(3), \fBguestfish\fR\|(1), \fBguestmount\fR\|(1), \fBvirt\-copy\-out\fR\|(1), http://libguestfs.org/.
+\&\fBguestfs\fR\|(3), \fBguestfish\fR\|(1), \fBguestmount\fR\|(1), \fBvirt\-copy\-out\fR\|(1), \fBvirt\-drivers\fR\|(1), http://libguestfs.org/.
 .SH "АВТОР"
 .IX Header "АВТОР"
 Richard W.M. Jones http://people.redhat.com/~rjones/
 .SH "АВТОРСЬКІ ПРАВА"
 .IX Header "АВТОРСЬКІ ПРАВА"
-Copyright (C) 2013\-2020 Red Hat Inc.
+Copyright (C) 2013\-2023 Red Hat Inc.
 .SH "LICENSE"
 .IX Header "LICENSE"
 .SH "BUGS"
index 4239fb6b64c6193596fe63978407cbfa97ecc636..05e72cacecab3d3fe28d6721d253a7b398e13f19 100644 (file)
@@ -11,7 +11,7 @@ virt-get-kernel — видобування ядра і диска в пам'ят
 
 =head1 ОПИС
 
-За допомогою цього параметра можна видобути ядро та initramfs з гостьової системи.
+This program extracts the kernel and initramfs from a guest.
 
 Формат образу диска буде визначено автоматично, якщо ви не вкажете його за допомогою параметра I<--format>.
 
@@ -162,7 +162,7 @@ Wrap error, warning, and informative messages.  This is the default when the out
 
 =head1 ТАКОЖ ПЕРЕГЛЯНЬТЕ
 
-L<guestfs(3)>, L<guestfish(1)>, L<guestmount(1)>, L<virt-copy-out(1)>, L<http://libguestfs.org/>.
+L<guestfs(3)>, L<guestfish(1)>, L<guestmount(1)>, L<virt-copy-out(1)>, L<virt-drivers(1)>, L<http://libguestfs.org/>.
 
 =head1 АВТОР
 
@@ -170,5 +170,5 @@ Richard W.M. Jones L<http://people.redhat.com/~rjones/>
 
 =head1 АВТОРСЬКІ ПРАВА
 
-Copyright (C) 2013-2020 Red Hat Inc.
+Copyright (C) 2013-2023 Red Hat Inc.
 
index 95c687b76cf91205b4bf157ccbb27c42be23dbb9..9cfd34c177bb571c2723fe3c811857d07160fccb 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Podwrapper::Man 1.48.3 (Pod::Simple 3.43)
+.\" Automatically generated by Podwrapper::Man 1.50.0 (Pod::Simple 3.43)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -71,7 +71,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-index-validate 1"
-.TH virt-index-validate 1 "2023-01-11" "guestfs-tools-1.48.3" "Virtualization Support"
+.TH virt-index-validate 1 "2023-02-07" "guestfs-tools-1.50.0" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index 005e6156b6715e448d292225f599e59d860b3561..8c73656d33e595c79d45e4cddbe7ff65a098af84 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Podwrapper::Man 1.48.3 (Pod::Simple 3.43)
+.\" Automatically generated by Podwrapper::Man 1.50.0 (Pod::Simple 3.43)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -71,7 +71,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-inspector 1"
-.TH virt-inspector 1 "2023-01-11" "guestfs-tools-1.48.3" "Virtualization Support"
+.TH virt-inspector 1 "2023-02-07" "guestfs-tools-1.50.0" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -111,6 +111,8 @@ Virt-inspector може одночасно інспектувати і ство
 Оскільки virt-inspector потрібен безпосередній доступ до образів гостьової системи, програма, зазвичай, не працюватиме, якщо використовується віддалене з'єднання із libvirt.
 .PP
 Усі дані, які доступні за допомогою virt-inspector, також доступні і з основного програмного інтерфейсу інспектування libguestfs (див. \*(L"ІНСПЕКТУВАННЯ\*(R" in \fBguestfs\fR\|(3)). Ті самі дані можна також отримати за допомогою guestfish або прив'язок до libguestfs багатьма мовами програмування (див. \*(L"ОТРИМАННЯ ДАНИХ ІНСПЕКТУВАННЯ ЗА ДОПОМОГОЮ ПРОГРАМНОГО ІНТЕРФЕЙСУ \s-1LIBGUESTFS\*(R"\s0).
+.PP
+Additional information about bootloader, kernel and drivers inside a guest can be found using \fBvirt\-drivers\fR\|(1).
 .SH "ПАРАМЕТРИ"
 .IX Header "ПАРАМЕТРИ"
 .IP "\fB\-\-help\fR" 4
@@ -189,6 +191,15 @@ Use the specified \f(CW\*(C`KEY_STRING\*(C'\fR as passphrase.
 .el .IP "\fB\-\-key\fR \f(CWID\fR:file:FILENAME" 4
 .IX Item "--key ID:file:FILENAME"
 Read the passphrase from \fI\s-1FILENAME\s0\fR.
+.ie n .IP "\fB\-\-key\fR ""ID"":clevis" 4
+.el .IP "\fB\-\-key\fR \f(CWID\fR:clevis" 4
+.IX Item "--key ID:clevis"
+Attempt passphrase-less unlocking for \f(CW\*(C`ID\*(C'\fR with Clevis, over the
+network.  Please refer to \*(L"\s-1ENCRYPTED DISKS\*(R"\s0 in \fBguestfs\fR\|(3) for more
+information on network-bound disk encryption (\s-1NBDE\s0).
+.Sp
+Note that if any such option is present on the command line, \s-1QEMU\s0 user
+networking will be automatically enabled for the libguestfs appliance.
 .RE
 .RS 4
 .RE
@@ -493,7 +504,7 @@ multiple keys on stdin, one per line.
 Ця програма повертає значення 0 у разі успішного завершення і ненульове значення, якщо сталася помилка.
 .SH "ТАКОЖ ПЕРЕГЛЯНЬТЕ"
 .IX Header "ТАКОЖ ПЕРЕГЛЯНЬТЕ"
-\&\fBguestfs\fR\|(3), \fBguestfish\fR\|(1), http://www.w3.org/TR/xpath/, \fBbase64\fR\|(1), \fBxmlstarlet\fR\|(1), http://libguestfs.org/.
+\&\fBguestfs\fR\|(3), \fBguestfish\fR\|(1), http://www.w3.org/TR/xpath/, \fBbase64\fR\|(1), \fBxmlstarlet\fR\|(1), \fBvirt\-drivers\fR\|(1), http://libguestfs.org/.
 .SH "АВТОРИ"
 .IX Header "АВТОРИ"
 .IP "\(bu" 4
@@ -502,7 +513,7 @@ Richard W.M. Jones http://people.redhat.com/~rjones/
 Matthew Booth mbooth@redhat.com
 .SH "АВТОРСЬКІ ПРАВА"
 .IX Header "АВТОРСЬКІ ПРАВА"
-© Red Hat Inc., 2010–2012
+Copyright (C) 2010\-2023 Red Hat Inc.
 .SH "LICENSE"
 .IX Header "LICENSE"
 .SH "BUGS"
index de60242cc8a94b339c44799ed0a69fbb8d6fa322..67f38e4b05bdb5e43a6607833b2a2724ceb83e57 100644 (file)
@@ -33,6 +33,8 @@ Virt-inspector може одночасно інспектувати і ство
 
 Усі дані, які доступні за допомогою virt-inspector, також доступні і з основного програмного інтерфейсу інспектування libguestfs (див. L<guestfs(3)/ІНСПЕКТУВАННЯ>). Ті самі дані можна також отримати за допомогою guestfish або прив'язок до libguestfs багатьма мовами програмування (див. L</ОТРИМАННЯ ДАНИХ ІНСПЕКТУВАННЯ ЗА ДОПОМОГОЮ ПРОГРАМНОГО ІНТЕРФЕЙСУ LIBGUESTFS>).
 
+Additional information about bootloader, kernel and drivers inside a guest can be found using L<virt-drivers(1)>.
+
 =head1 ПАРАМЕТРИ
 
 =over 4
@@ -368,7 +370,7 @@ C<inspect-os> виконує інспектування поточного об
 
 =head1 ТАКОЖ ПЕРЕГЛЯНЬТЕ
 
-L<guestfs(3)>, L<guestfish(1)>, L<http://www.w3.org/TR/xpath/>, L<base64(1)>, L<xmlstarlet(1)>, L<http://libguestfs.org/>.
+L<guestfs(3)>, L<guestfish(1)>, L<http://www.w3.org/TR/xpath/>, L<base64(1)>, L<xmlstarlet(1)>, L<virt-drivers(1)>, L<http://libguestfs.org/>.
 
 =head1 АВТОРИ
 
@@ -386,5 +388,5 @@ Matthew Booth L<mbooth@redhat.com>
 
 =head1 АВТОРСЬКІ ПРАВА
 
-© Red Hat Inc., 2010–2012
+Copyright (C) 2010-2023 Red Hat Inc.
 
index ecdd43539379f707869625efaf29d29f44010bc0..163f408e01b6ff12656d87ade08275a848c422d2 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Podwrapper::Man 1.48.3 (Pod::Simple 3.43)
+.\" Automatically generated by Podwrapper::Man 1.50.0 (Pod::Simple 3.43)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -71,7 +71,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-log 1"
-.TH virt-log 1 "2023-01-11" "guestfs-tools-1.48.3" "Virtualization Support"
+.TH virt-log 1 "2023-02-07" "guestfs-tools-1.50.0" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -196,6 +196,15 @@ Use the specified \f(CW\*(C`KEY_STRING\*(C'\fR as passphrase.
 .el .IP "\fB\-\-key\fR \f(CWID\fR:file:FILENAME" 4
 .IX Item "--key ID:file:FILENAME"
 Read the passphrase from \fI\s-1FILENAME\s0\fR.
+.ie n .IP "\fB\-\-key\fR ""ID"":clevis" 4
+.el .IP "\fB\-\-key\fR \f(CWID\fR:clevis" 4
+.IX Item "--key ID:clevis"
+Attempt passphrase-less unlocking for \f(CW\*(C`ID\*(C'\fR with Clevis, over the
+network.  Please refer to \*(L"\s-1ENCRYPTED DISKS\*(R"\s0 in \fBguestfs\fR\|(3) for more
+information on network-bound disk encryption (\s-1NBDE\s0).
+.Sp
+Note that if any such option is present on the command line, \s-1QEMU\s0 user
+networking will be automatically enabled for the libguestfs appliance.
 .RE
 .RS 4
 .RE
@@ -234,7 +243,7 @@ multiple keys on stdin, one per line.
 Richard W.M. Jones http://people.redhat.com/~rjones/
 .SH "АВТОРСЬКІ ПРАВА"
 .IX Header "АВТОРСЬКІ ПРАВА"
-Copyright (C) 2010\-2020 Red Hat Inc.
+Copyright (C) 2010\-2023 Red Hat Inc.
 .SH "LICENSE"
 .IX Header "LICENSE"
 .SH "BUGS"
index 4be0f1d3da4cebb63b784bbdcdfa2f051f96ce3b..90f7a784375747d698753a6ac5ade5a2e3cecbf6 100644 (file)
@@ -123,5 +123,5 @@ Richard W.M. Jones L<http://people.redhat.com/~rjones/>
 
 =head1 АВТОРСЬКІ ПРАВА
 
-Copyright (C) 2010-2020 Red Hat Inc.
+Copyright (C) 2010-2023 Red Hat Inc.
 
index ac7f4196d0380a7111a13316499e3b03253e9f52..4d59ea81619d5f39d49807b3520b7a6d6e07d5cb 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Podwrapper::Man 1.48.3 (Pod::Simple 3.43)
+.\" Automatically generated by Podwrapper::Man 1.50.0 (Pod::Simple 3.43)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -71,7 +71,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-ls 1"
-.TH virt-ls 1 "2023-01-11" "guestfs-tools-1.48.3" "Virtualization Support"
+.TH virt-ls 1 "2023-02-07" "guestfs-tools-1.50.0" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -389,6 +389,15 @@ Use the specified \f(CW\*(C`KEY_STRING\*(C'\fR as passphrase.
 .el .IP "\fB\-\-key\fR \f(CWID\fR:file:FILENAME" 4
 .IX Item "--key ID:file:FILENAME"
 Read the passphrase from \fI\s-1FILENAME\s0\fR.
+.ie n .IP "\fB\-\-key\fR ""ID"":clevis" 4
+.el .IP "\fB\-\-key\fR \f(CWID\fR:clevis" 4
+.IX Item "--key ID:clevis"
+Attempt passphrase-less unlocking for \f(CW\*(C`ID\*(C'\fR with Clevis, over the
+network.  Please refer to \*(L"\s-1ENCRYPTED DISKS\*(R"\s0 in \fBguestfs\fR\|(3) for more
+information on network-bound disk encryption (\s-1NBDE\s0).
+.Sp
+Note that if any such option is present on the command line, \s-1QEMU\s0 user
+networking will be automatically enabled for the libguestfs appliance.
 .RE
 .RS 4
 .RE
@@ -533,7 +542,7 @@ multiple keys on stdin, one per line.
 Richard W.M. Jones http://people.redhat.com/~rjones/
 .SH "АВТОРСЬКІ ПРАВА"
 .IX Header "АВТОРСЬКІ ПРАВА"
-Copyright (C) 2009\-2020 Red Hat Inc.
+Copyright (C) 2009\-2023 Red Hat Inc.
 .SH "LICENSE"
 .IX Header "LICENSE"
 .SH "BUGS"
index c45e95847c9e5881772c7bd135b9a939b484affa..2ad28042c613a97adbfd6c27825bd8d11a0de2d2 100644 (file)
@@ -429,5 +429,5 @@ Richard W.M. Jones L<http://people.redhat.com/~rjones/>
 
 =head1 АВТОРСЬКІ ПРАВА
 
-Copyright (C) 2009-2020 Red Hat Inc.
+Copyright (C) 2009-2023 Red Hat Inc.
 
index a34d93b370cafe77cdbad188be25d38fdf01fa4e..c6adbeb462fc2edde040833857986d10576b8c26 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Podwrapper::Man 1.48.3 (Pod::Simple 3.43)
+.\" Automatically generated by Podwrapper::Man 1.50.0 (Pod::Simple 3.43)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -71,7 +71,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-make-fs 1"
-.TH virt-make-fs 1 "2023-01-11" "guestfs-tools-1.48.3" "Virtualization Support"
+.TH virt-make-fs 1 "2023-02-07" "guestfs-tools-1.50.0" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -255,7 +255,7 @@ See also \*(L"guestfs_add_drive_opts\*(R" in \fBguestfs\fR\|(3).
 Richard W.M. Jones http://people.redhat.com/~rjones/
 .SH "АВТОРСЬКІ ПРАВА"
 .IX Header "АВТОРСЬКІ ПРАВА"
-Copyright (C) 2010\-2020 Red Hat Inc.
+Copyright (C) 2010\-2023 Red Hat Inc.
 .SH "LICENSE"
 .IX Header "LICENSE"
 .SH "BUGS"
index 181e5524d540aff4df6a35e408a140ceed2d580c..6740bb7678c6a47bd2f317a735dcbe51bb80bd05 100644 (file)
@@ -179,5 +179,5 @@ Richard W.M. Jones L<http://people.redhat.com/~rjones/>
 
 =head1 АВТОРСЬКІ ПРАВА
 
-Copyright (C) 2010-2020 Red Hat Inc.
+Copyright (C) 2010-2023 Red Hat Inc.
 
index 3128b652eaaf6ff3fe0afc38d1550040d7179695..4796c1091f8cbdb0ce754577741c3cc905b2df71 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Podwrapper::Man 1.48.3 (Pod::Simple 3.43)
+.\" Automatically generated by Podwrapper::Man 1.50.0 (Pod::Simple 3.43)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -71,7 +71,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-resize 1"
-.TH virt-resize 1 "2023-01-11" "guestfs-tools-1.48.3" "Virtualization Support"
+.TH virt-resize 1 "2023-02-07" "guestfs-tools-1.50.0" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -654,7 +654,7 @@ In both cases, virt-resize will not expand the mentioned filesystem; the result
 Richard W.M. Jones http://people.redhat.com/~rjones/
 .SH "АВТОРСЬКІ ПРАВА"
 .IX Header "АВТОРСЬКІ ПРАВА"
-© Red Hat Inc., 2010–2012
+Copyright (C) 2010\-2023 Red Hat Inc.
 .SH "LICENSE"
 .IX Header "LICENSE"
 .SH "BUGS"
index f573b3a7cfe39ea8f50366d20d70cb708d216fa8..73053feaf871f1ec7cfd239d962aa8f5c1949c66 100644 (file)
@@ -617,5 +617,5 @@ Richard W.M. Jones L<http://people.redhat.com/~rjones/>
 
 =head1 АВТОРСЬКІ ПРАВА
 
-© Red Hat Inc., 2010–2012
+Copyright (C) 2010-2023 Red Hat Inc.
 
index 05323a31a072f2808b6cec7c11f62caf21e332fe..180bb6cefcfb501689201b3f299678ee8f3fb5b7 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Podwrapper::Man 1.48.3 (Pod::Simple 3.43)
+.\" Automatically generated by Podwrapper::Man 1.50.0 (Pod::Simple 3.43)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -71,7 +71,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-sparsify 1"
-.TH virt-sparsify 1 "2023-01-11" "guestfs-tools-1.48.3" "Virtualization Support"
+.TH virt-sparsify 1 "2023-02-07" "guestfs-tools-1.50.0" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -261,6 +261,15 @@ Use the specified \f(CW\*(C`KEY_STRING\*(C'\fR as passphrase.
 .el .IP "\fB\-\-key\fR \f(CWID\fR:file:FILENAME" 4
 .IX Item "--key ID:file:FILENAME"
 Read the passphrase from \fI\s-1FILENAME\s0\fR.
+.ie n .IP "\fB\-\-key\fR ""ID"":clevis" 4
+.el .IP "\fB\-\-key\fR \f(CWID\fR:clevis" 4
+.IX Item "--key ID:clevis"
+Attempt passphrase-less unlocking for \f(CW\*(C`ID\*(C'\fR with Clevis, over the
+network.  Please refer to \*(L"\s-1ENCRYPTED DISKS\*(R"\s0 in \fBguestfs\fR\|(3) for more
+information on network-bound disk encryption (\s-1NBDE\s0).
+.Sp
+Note that if any such option is present on the command line, \s-1QEMU\s0 user
+networking will be automatically enabled for the libguestfs appliance.
 .RE
 .RS 4
 .RE
@@ -438,7 +447,7 @@ Wrap error, warning, and informative messages.  This is the default when the out
 Richard W.M. Jones http://people.redhat.com/~rjones/
 .SH "АВТОРСЬКІ ПРАВА"
 .IX Header "АВТОРСЬКІ ПРАВА"
-Copyright (C) 2011\-2020 Red Hat Inc.
+Copyright (C) 2011\-2023 Red Hat Inc.
 .SH "LICENSE"
 .IX Header "LICENSE"
 .SH "BUGS"
index 181b94e8792a9cca2d868973f87e21e693edeada..a43e0791f35398409b3ff26429d4a3baa3218b83 100644 (file)
@@ -376,5 +376,5 @@ Richard W.M. Jones L<http://people.redhat.com/~rjones/>
 
 =head1 АВТОРСЬКІ ПРАВА
 
-Copyright (C) 2011-2020 Red Hat Inc.
+Copyright (C) 2011-2023 Red Hat Inc.
 
index ec5983c53061c8a7b60a5803d770dd2eabc8a204..ece8fc70304c6cf9c665d5f7db926adf4624433e 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Podwrapper::Man 1.48.3 (Pod::Simple 3.43)
+.\" Automatically generated by Podwrapper::Man 1.50.0 (Pod::Simple 3.43)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -71,7 +71,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-sysprep 1"
-.TH virt-sysprep 1 "2023-01-11" "guestfs-tools-1.48.3" "Virtualization Support"
+.TH virt-sysprep 1 "2023-02-07" "guestfs-tools-1.50.0" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
@@ -234,6 +234,15 @@ Use the specified \f(CW\*(C`KEY_STRING\*(C'\fR as passphrase.
 .el .IP "\fB\-\-key\fR \f(CWID\fR:file:FILENAME" 4
 .IX Item "--key ID:file:FILENAME"
 Read the passphrase from \fI\s-1FILENAME\s0\fR.
+.ie n .IP "\fB\-\-key\fR ""ID"":clevis" 4
+.el .IP "\fB\-\-key\fR \f(CWID\fR:clevis" 4
+.IX Item "--key ID:clevis"
+Attempt passphrase-less unlocking for \f(CW\*(C`ID\*(C'\fR with Clevis, over the
+network.  Please refer to \*(L"\s-1ENCRYPTED DISKS\*(R"\s0 in \fBguestfs\fR\|(3) for more
+information on network-bound disk encryption (\s-1NBDE\s0).
+.Sp
+Note that if any such option is present on the command line, \s-1QEMU\s0 user
+networking will be automatically enabled for the libguestfs appliance.
 .RE
 .RS 4
 .RE
@@ -444,6 +453,36 @@ Wrap error, warning, and informative messages.  This is the default when the out
 .el .IP "\fB\-\-hostname\fR НАЗВА_ВУЗЛА (див. \f(CWcustomize\fR нижче)" 4
 .IX Item "--hostname НАЗВА_ВУЗЛА (див. customize нижче)"
 Встановити як назву вузла гостьової системи значення \f(CW\*(C`НАЗВА_ВУЗЛА\*(C'\fR. Якщо потрібно, можете скористатися форматом із крапкою, «назва_вузла.назва_домену» (\s-1FQDN\s0).
+.ie n .IP "\fB\-\-inject\-qemu\-ga\fR \s-1METHOD\s0 (see ""customize"" below)" 4
+.el .IP "\fB\-\-inject\-qemu\-ga\fR \s-1METHOD\s0 (see \f(CWcustomize\fR below)" 4
+.IX Item "--inject-qemu-ga METHOD (see customize below)"
+Inject the \s-1QEMU\s0 Guest Agent into a Windows guest.  The guest agent communicates with qemu through a socket in order to provide enhanced features (see \fBqemu\-ga\fR\|(8)).  This operation also injects a firstboot script so that the Guest Agent is installed when the guest boots.
+.Sp
+The parameter is the same as used by the \fI\-\-inject\-virtio\-win\fR operation.
+.Sp
+Note that to do a full conversion of a Windows guest from a foreign hypervisor like VMware (which involves many other operations)  you should use the \fBvirt\-v2v\fR\|(1) tool instead of this.
+.ie n .IP "\fB\-\-inject\-virtio\-win\fR \s-1METHOD\s0 (see ""customize"" below)" 4
+.el .IP "\fB\-\-inject\-virtio\-win\fR \s-1METHOD\s0 (see \f(CWcustomize\fR below)" 4
+.IX Item "--inject-virtio-win METHOD (see customize below)"
+Inject virtio-win drivers into a Windows guest.  These drivers add virtio accelerated drivers suitable when running on top of a hypervisor that supports virtio (such as qemu/KVM).  The operation also adjusts the Windows Registry so that the drivers are installed when the guest boots.
+.Sp
+The parameter can be one of:
+.RS 4
+.IP "\s-1ISO\s0" 4
+.IX Item "ISO"
+The path to the \s-1ISO\s0 image containing the virtio-win drivers (eg. \fI/usr/share/virtio\-win/virtio\-win.iso\fR).
+.IP "\s-1DIR\s0" 4
+.IX Item "DIR"
+The directory containing the unpacked virtio-win drivers (eg. \fI/usr/share/virtio\-win\fR).
+.ie n .IP "\fB""osinfo""\fR" 4
+.el .IP "\fB``osinfo''\fR" 4
+.IX Item "osinfo"
+The literal string \f(CW"osinfo"\fR means to use the libosinfo database to locate the drivers.  (See \fBosinfo\-query\fR\|(1).
+.RE
+.RS 4
+.Sp
+Note that to do a full conversion of a Windows guest from a foreign hypervisor like VMware (which involves many other operations)  you should use the \fBvirt\-v2v\fR\|(1) tool instead of this.
+.RE
 .ie n .IP "\fB\-\-install\fR ПАКУНОК,ПАКУНОК... (див. ""customize"" нижче)" 4
 .el .IP "\fB\-\-install\fR ПАКУНОК,ПАКУНОК... (див. \f(CWcustomize\fR нижче)" 4
 .IX Item "--install ПАКУНОК,ПАКУНОК... (див. customize нижче)"
@@ -486,6 +525,14 @@ Wrap error, warning, and informative messages.  This is the default when the out
 Витерти \f(CW\*(C`builder.log\*(C'\fR (файл журналу із командами збирання) з образу після завершення збирання. Якщо ви не хочете явним чином показувати, як було зібрано образ, скористайтеся цим параметром.
 .Sp
 Див. також \*(L"\s-1LOG FILE\*(R"\s0.
+.ie n .IP "\fB\-\-no\-selinux\-relabel\fR (see ""customize"" below)" 4
+.el .IP "\fB\-\-no\-selinux\-relabel\fR (see \f(CWcustomize\fR below)" 4
+.IX Item "--no-selinux-relabel (see customize below)"
+Do not attempt to correct the SELinux labels of files in the guest.
+.Sp
+In such guests that support SELinux, customization automatically relabels files so that they have the correct SELinux label.  (The relabeling is performed immediately, but if the operation fails, customization will instead touch \fI/.autorelabel\fR on the image to schedule a relabel operation for the next time the image boots.)  This option disables the automatic relabeling.
+.Sp
+The option is a no-op for guests that do not support SELinux.
 .ie n .IP "\fB\-\-password\fR КОРИСТУВАЧ:ВАРІАНТ (див. ""customize"" нижче)" 4
 .el .IP "\fB\-\-password\fR КОРИСТУВАЧ:ВАРІАНТ (див. \f(CWcustomize\fR нижче)" 4
 .IX Item "--password КОРИСТУВАЧ:ВАРІАНТ (див. customize нижче)"
@@ -575,11 +622,7 @@ Wrap error, warning, and informative messages.  This is the default when the out
 .ie n .IP "\fB\-\-selinux\-relabel\fR (див. ""customize"" нижче)" 4
 .el .IP "\fB\-\-selinux\-relabel\fR (див. \f(CWcustomize\fR нижче)" 4
 .IX Item "--selinux-relabel (див. customize нижче)"
-Повторно встановити мітки для файлів у гостьовій системі так, щоб вони були правильними з точки зору SELinux.
-.Sp
-Якщо буде використано цей параметр, програма спробує змінити мітки файлів негайно, але якщо цього зробити не вдасться, вона змінить часову мітку файла \fI/.autorelabel\fR на образі, щоб дію зі зміни міток було заплановано на наступне завантаження образу.
-.Sp
-Вам слід використовувати цей параметр лише для гостьових систем із підтримкою SELinux.
+This is a compatibility option that does nothing.
 .ie n .IP "\fB\-\-sm\-attach\fR ВАРІАНТ (див. ""customize"" нижче)" 4
 .el .IP "\fB\-\-sm\-attach\fR ВАРІАНТ (див. \f(CWcustomize\fR нижче)" 4
 .IX Item "--sm-attach ВАРІАНТ (див. customize нижче)"
@@ -919,6 +962,11 @@ Remove the Kerberos host keytab file in the guest.
 /var/log/xferlog*
 .IP "·" 4
 /var/named/data/named.run
+.SS "\fBlvm-system-devices\fP *"
+.IX Subsection "lvm-system-devices *"
+Remove \s-1LVM2\s0 system.devices file.
+.PP
+On Linux guests, \s-1LVM2\s0's scanning for physical volumes (PVs) may be restricted to those block devices whose WWIDs are listed in \f(CW\*(C`/etc/lvm/devices/system.devices\*(C'\fR.  When cloning VMs, WWIDs may change, breaking \f(CW\*(C`lvm pvscan\*(C'\fR.  Remove \f(CW\*(C`/etc/lvm/devices/system.devices\*(C'\fR.
 .SS "\fBlvm-uuids\fP *"
 .IX Subsection "lvm-uuids *"
 Змінити \s-1UUID\s0 ФТ і ГТ \s-1LVM2.\s0
@@ -1212,6 +1260,8 @@ MAC\-адреса мережевої картки
 Кожен з параметрів або обидва параметри можна використовувати у рядку команди довільну кількість разів.
 .SH "БЕЗПЕКА"
 .IX Header "БЕЗПЕКА"
+Virtual machines that employ full disk encryption \fIinternally to the guest\fR should not be considered for cloning and distribution, as it provides multiple parties with the same internal volume key, enabling any one such party to decrypt all the other clones.  Refer to the \s-1LUKS FAQ\s0 for details.
+.PP
 Хоча virt-sysprep вилучає певні конфіденційні дані з гостьової системи, програма не претендує на вилучення усіх цих даних. Вам слід ознайомитися із розділом \*(L"ДІЇ\*(R" вище і вивчити саму гостьову систему після виконання дій.
 .PP
 Файли з конфіденційними даними просто вилучаються. Дані, які у них містяться, можуть залишатися на диску. Такі дані доволі просто відновити за допомогою шістнадцяткового редактора або засобів для відновлення файлів. Ви можете скористатися параметром \fI\-\-scrub\fR для витирання вмісту файлів замість простого їх вилучення. Ще одним способом вилучити конфіденційні дані є використання \fBvirt\-sparsify\fR\|(1). Крім того, витерти вміст вилучених каталогів та inode можна за допомогою команди \fBscrub\fR\|(1).
@@ -1274,7 +1324,7 @@ Richard W.M. Jones http://people.redhat.com/~rjones/
 Wanlong Gao, Fujitsu Ltd.
 .SH "АВТОРСЬКІ ПРАВА"
 .IX Header "АВТОРСЬКІ ПРАВА"
-Copyright (C) 2011\-2020 Red Hat Inc.
+Copyright (C) 2011\-2023 Red Hat Inc.
 .PP
 Авторські права належать Fujitsu Ltd., 2012
 .SH "LICENSE"
index 954e3046fb6731c6b2eccd9a9c93e2095f9e1f98..17f7ae67263deda7c39acce0ac9ec5e867dc2de1 100644 (file)
@@ -403,6 +403,8 @@ I<--script скрипт> запускає скрипт командної обо
 
 =head1 БЕЗПЕКА
 
+Virtual machines that employ full disk encryption I<internally to the guest> should not be considered for cloning and distribution, as it provides multiple parties with the same internal volume key, enabling any one such party to decrypt all the other clones.  Refer to the L<LUKS FAQ|https://gitlab.com/cryptsetup/cryptsetup/-/blob/main/FAQ.md> for details.
+
 Хоча virt-sysprep вилучає певні конфіденційні дані з гостьової системи, програма не претендує на вилучення усіх цих даних. Вам слід ознайомитися із розділом L</ДІЇ> вище і вивчити саму гостьову систему після виконання дій.
 
 Файли з конфіденційними даними просто вилучаються. Дані, які у них містяться, можуть залишатися на диску. Такі дані доволі просто відновити за допомогою шістнадцяткового редактора або засобів для відновлення файлів. Ви можете скористатися параметром I<--scrub> для витирання вмісту файлів замість простого їх вилучення. Ще одним способом вилучити конфіденційні дані є використання L<virt-sparsify(1)>. Крім того, витерти вміст вилучених каталогів та inode можна за допомогою команди L<scrub(1)>.
@@ -476,7 +478,7 @@ Wanlong Gao, Fujitsu Ltd.
 
 =head1 АВТОРСЬКІ ПРАВА
 
-Copyright (C) 2011-2020 Red Hat Inc.
+Copyright (C) 2011-2023 Red Hat Inc.
 
 Авторські права належать Fujitsu Ltd., 2012
 
index 143fc322397c2431997b528870db931b9ad74b3e..f654138bbbd29dca9a7b78359e2df3c0e51fe4e5 100644 (file)
@@ -1,4 +1,4 @@
-.\" Automatically generated by Podwrapper::Man 1.48.3 (Pod::Simple 3.43)
+.\" Automatically generated by Podwrapper::Man 1.50.0 (Pod::Simple 3.43)
 .\"
 .\" Standard preamble:
 .\" ========================================================================
@@ -71,7 +71,7 @@
 .\" ========================================================================
 .\"
 .IX Title "virt-win-reg 1"
-.TH virt-win-reg 1 "2023-01-11" "guestfs-tools-1.48.3" "Virtualization Support"
+.TH virt-win-reg 1 "2023-02-07" "guestfs-tools-1.50.0" "Virtualization Support"
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l
index b4fb04ba1e75ee3d9c8c53e50e5c579822fb4379..e89261c9453e7e62ae4a67fa630569d7db919522 100644 (file)
@@ -1,5 +1,5 @@
 # libguestfs
-# Copyright (C) 2009-2021 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index fd2b29b92e769b832aba58eda5b4de514314e93c..17fa3ec7f9394d26bdfc676b7d7525a9bce604ad 100644 (file)
@@ -15,7 +15,7 @@
 @SET_MAKE@
 
 # libguestfs
-# Copyright (C) 2009-2021 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -32,7 +32,7 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -218,7 +218,6 @@ EGREP = @EGREP@
 ETAGS = @ETAGS@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FILECMD = @FILECMD@
 GCC_VISIBILITY_HIDDEN = @GCC_VISIBILITY_HIDDEN@
 GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
 GMSGFMT = @GMSGFMT@
@@ -247,6 +246,8 @@ LIBINTL = @LIBINTL@
 LIBLZMA_CFLAGS = @LIBLZMA_CFLAGS@
 LIBLZMA_LIBS = @LIBLZMA_LIBS@
 LIBOBJS = @LIBOBJS@
+LIBOSINFO_CFLAGS = @LIBOSINFO_CFLAGS@
+LIBOSINFO_LIBS = @LIBOSINFO_LIBS@
 LIBS = @LIBS@
 LIBTINFO_CFLAGS = @LIBTINFO_CFLAGS@
 LIBTINFO_LIBS = @LIBTINFO_LIBS@
@@ -317,6 +318,7 @@ PO4A_TRANSLATE = @PO4A_TRANSLATE@
 PODWRAPPER = @PODWRAPPER@
 POSUB = @POSUB@
 RANLIB = @RANLIB@
+REALPATH = @REALPATH@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
index 2942d478562e587a95062d123ad94ca807ec2c93..5bd24bbcd1c9c8b920bea412c8e7cf4102b13a15 100644 (file)
@@ -16,6 +16,7 @@ common/mlpcre/pcre-c.c
 common/mlprogress/progress-c.c
 common/mltools/JSON_parser-c.c
 common/mltools/getopt-c.c
+common/mltools/libosinfo-c.c
 common/mltools/tools_utils-c.c
 common/mltools/uri-c.c
 common/mlutils/c_utils-c.c
@@ -37,6 +38,7 @@ common/progress/progress.c
 common/structs/structs-cleanups.c
 common/structs/structs-print.c
 common/utils/cleanups.c
+common/utils/environ.c
 common/utils/gnulib-cleanups.c
 common/utils/libxml2-cleanups.c
 common/utils/pcre2-cleanups.c
index 66c7c535c10f6d8cdd90fe7502c12dc1fbed834d..73984796f11feeabe8da6b78bc9a57fa101eece3 100644 (file)
@@ -20,6 +20,13 @@ builder/utils.ml
 common/mlcustomize/SELinux_relabel.ml
 common/mlcustomize/customize_cmdline.ml
 common/mlcustomize/firstboot.ml
+common/mlcustomize/guest_packages.ml
+common/mlcustomize/inject_virtio_win.ml
+common/mldrivers/firmware.ml
+common/mldrivers/linux.ml
+common/mldrivers/linux_bootloaders.ml
+common/mldrivers/linux_kernels.ml
+common/mldrivers/windows_drivers.ml
 common/mlgettext/common_gettext.ml
 common/mlpcre/PCRE.ml
 common/mlprogress/progress.ml
@@ -27,12 +34,15 @@ common/mlstdutils/guestfs_config.ml
 common/mlstdutils/std_utils.ml
 common/mlstdutils/stringMap.ml
 common/mlstdutils/stringSet.ml
+common/mltools/DOM.ml
 common/mltools/JSON.ml
 common/mltools/JSON_parser.ml
 common/mltools/URI.ml
 common/mltools/checksums.ml
 common/mltools/curl.ml
 common/mltools/getopt.ml
+common/mltools/libosinfo.ml
+common/mltools/libosinfo_utils.ml
 common/mltools/on_exit.ml
 common/mltools/planner.ml
 common/mltools/regedit.ml
@@ -68,6 +78,7 @@ dib/output_format_tar.ml
 dib/output_format_tgz.ml
 dib/output_format_vhd.ml
 dib/utils.ml
+drivers/drivers.ml
 get-kernel/get_kernel.ml
 resize/resize.ml
 sparsify/cmdline.ml
@@ -95,6 +106,7 @@ sysprep/sysprep_operation_ipa_client.ml
 sysprep/sysprep_operation_kerberos_data.ml
 sysprep/sysprep_operation_kerberos_hostkeytab.ml
 sysprep/sysprep_operation_logfiles.ml
+sysprep/sysprep_operation_lvm_system_devices.ml
 sysprep/sysprep_operation_lvm_uuids.ml
 sysprep/sysprep_operation_machine_id.ml
 sysprep/sysprep_operation_mail_spool.ml
index 15367140a8abd8b01e8da5cb66b2cd6bf12d4725..5f13f5db296504dd6269ff36dfa802cf3d902064 100644 (file)
@@ -6,10 +6,10 @@
 #, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: guestfs-tools 1.48.3\n"
+"Project-Id-Version: guestfs-tools 1.50.0\n"
 "Report-Msgid-Bugs-To: https://bugzilla.redhat.com/enter_bug.cgi?"
 "component=libguestfs&product=Virtualization+Tools\n"
-"POT-Creation-Date: 2023-01-11 10:15+0000\n"
+"POT-Creation-Date: 2023-02-07 11:12+0000\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -22,27 +22,27 @@ msgstr ""
 msgid "  %s: already provided by %s"
 msgstr ""
 
-#: resize/resize.ml:980
+#: resize/resize.ml:1029
 msgid "  An extra partition will be created for the surplus."
 msgstr ""
 
-#: resize/resize.ml:954 resize/resize.ml:923
+#: resize/resize.ml:1001 resize/resize.ml:967
 msgid "  The %s on %s will be expanded using the ‘%s’ method."
 msgstr ""
 
-#: resize/resize.ml:982
+#: resize/resize.ml:1031
 msgid ""
 "  The surplus space is not large enough for an extra partition to be created "
 "and so it will just be ignored."
 msgstr ""
 
-#: resize/resize.ml:984
+#: resize/resize.ml:1034
 msgid ""
 "  The surplus space will be ignored.  Run a partitioning program in the "
 "guest to partition this extra space if you want."
 msgstr ""
 
-#: common/mltools/tools_utils.ml:234
+#: common/mltools/tools_utils.ml:235
 msgid "%s"
 msgstr ""
 
@@ -52,11 +52,11 @@ msgid ""
 "Options:\n"
 msgstr ""
 
-#: customize/customize_run.ml:446 common/mltools/tools_utils.ml:681
+#: customize/customize_run.ml:412 common/mltools/tools_utils.ml:686
 msgid "%s (ignored)"
 msgstr ""
 
-#: builder/builder.ml:319
+#: builder/builder.ml:330
 msgid ""
 "%s checksum of template did not match the expected checksum!\n"
 "  found checksum: %s\n"
@@ -71,10 +71,14 @@ msgstr ""
 msgid "%s did not return any output"
 msgstr ""
 
-#: customize/customize_run.ml:244
+#: customize/customize_run.ml:181
 msgid "%s does not exist in the guest"
 msgstr ""
 
+#: customize/customize_run.ml:121
+msgid "%s ignored for non-Windows guest"
+msgstr ""
+
 #: builder/simplestreams_parser.ml:59
 msgid "%s is not a Simple Streams (index) v1.0 JSON file (format: %s)"
 msgstr ""
@@ -83,7 +87,7 @@ msgstr ""
 msgid "%s is not a Simple Streams (products) v1.0 JSON file (format: %s)"
 msgstr ""
 
-#: customize/customize_run.ml:247
+#: customize/customize_run.ml:184
 msgid "%s is not a regular file in the guest"
 msgstr ""
 
@@ -91,11 +95,11 @@ msgstr ""
 msgid "%s needed but not found"
 msgstr ""
 
-#: common/mltools/tools_utils.ml:230 common/mltools/tools_utils.ml:201
+#: common/mltools/tools_utils.ml:231 common/mltools/tools_utils.ml:202
 msgid "%s: %s"
 msgstr ""
 
-#: common/mltools/tools_utils.ml:232
+#: common/mltools/tools_utils.ml:233
 msgid "%s: %s: %s"
 msgstr ""
 
@@ -105,7 +109,7 @@ msgid ""
 "%!"
 msgstr ""
 
-#: resize/resize.ml:706
+#: resize/resize.ml:733
 msgid ""
 "%s: This extended partition contains logical partitions which might be "
 "damaged by shrinking it.  If you want to shrink this partition, you need to "
@@ -114,11 +118,11 @@ msgid ""
 "line.)"
 msgstr ""
 
-#: resize/resize.ml:951
+#: resize/resize.ml:997
 msgid "%s: This logical volume will be expanded to maximum size."
 msgstr ""
 
-#: resize/resize.ml:702
+#: resize/resize.ml:724
 msgid ""
 "%s: This partition contains a %s filesystem which will be damaged by "
 "shrinking it below %Ld bytes (user asked to shrink it to %Ld bytes).  If you "
@@ -127,7 +131,7 @@ msgid ""
 "‘%s’ option on the command line.)"
 msgstr ""
 
-#: resize/resize.ml:698
+#: resize/resize.ml:714
 msgid ""
 "%s: This partition contains an LVM physical volume which will be damaged by "
 "shrinking it below %Ld bytes (user asked to shrink it to %Ld bytes).  If you "
@@ -136,7 +140,7 @@ msgid ""
 "‘%s‘ option on the command line.)"
 msgstr ""
 
-#: resize/resize.ml:695
+#: resize/resize.ml:707
 msgid ""
 "%s: This partition has unknown content which might be damaged by shrinking "
 "it.  If you want to shrink this partition, you need to use the ‘--resize-"
@@ -144,21 +148,21 @@ msgid ""
 "error came from ‘%s’ option on the command line.)"
 msgstr ""
 
-#: resize/resize.ml:916
+#: resize/resize.ml:959
 msgid ""
 "%s: This partition will be created, but the contents will be ignored (ie. "
 "not copied to the target)."
 msgstr ""
 
-#: resize/resize.ml:918
+#: resize/resize.ml:962
 msgid "%s: This partition will be deleted."
 msgstr ""
 
-#: resize/resize.ml:914
+#: resize/resize.ml:957
 msgid "%s: This partition will be left alone."
 msgstr ""
 
-#: resize/resize.ml:920
+#: resize/resize.ml:964
 msgid "%s: This partition will be resized from %s to %s."
 msgstr ""
 
@@ -178,31 +182,35 @@ msgid ""
 "read the man page virt-builder(1).\n"
 msgstr ""
 
-#: builder/index_parser.ml:145
+#: builder/index_parser.ml:156
 msgid "%s: cannot determine the virtual size of %s due to compression"
 msgstr ""
 
-#: builder/index_parser.ml:171
+#: common/mlcustomize/inject_virtio_win.ml:389
+msgid "%s: cannot open virtio-win ISO file: %s"
+msgstr ""
+
+#: builder/index_parser.ml:184
 msgid "%s: cannot parse ‘compressed_size’ field for ‘%s’\n"
 msgstr ""
 
-#: builder/index_parser.ml:196
+#: builder/index_parser.ml:211
 msgid "%s: cannot parse ‘hidden’ field for ‘%s’\n"
 msgstr ""
 
-#: builder/index_parser.ml:132
+#: builder/index_parser.ml:142
 msgid "%s: cannot parse ‘revision’ field for ‘%s’\n"
 msgstr ""
 
-#: builder/index_parser.ml:162
+#: builder/index_parser.ml:174
 msgid "%s: cannot parse ‘size’ field for ‘%s’\n"
 msgstr ""
 
-#: builder/index_parser.ml:246
+#: builder/index_parser.ml:261
 msgid "%s: cannot use a URI (‘%s’) in the index file\n"
 msgstr ""
 
-#: customize/customize_run.ml:67
+#: customize/customize_run.ml:72
 msgid "%s: command exited with an error"
 msgstr ""
 
@@ -216,7 +224,7 @@ msgid ""
 "read the man page virt-builder-repository(1).\n"
 msgstr ""
 
-#: customize/customize_main.ml:94
+#: customize/customize_main.ml:98
 msgid ""
 "%s: customize a virtual machine\n"
 "\n"
@@ -228,11 +236,19 @@ msgid ""
 "read the man page virt-customize(1).\n"
 msgstr ""
 
-#: common/mltools/tools_utils.ml:171
+#: drivers/drivers.ml:57
+msgid ""
+"%s: detect bootloader, kernel and drivers inside guest\n"
+"\n"
+"A short summary of the options is given below.  For detailed help please\n"
+"read the man page virt-drivers(1).\n"
+msgstr ""
+
+#: common/mltools/tools_utils.ml:172
 msgid "%s: error: %s"
 msgstr ""
 
-#: get-kernel/get_kernel.ml:66
+#: get-kernel/get_kernel.ml:67
 msgid ""
 "%s: extract kernel and ramdisk from a guest\n"
 "\n"
@@ -240,52 +256,52 @@ msgid ""
 "read the man page virt-get-kernel(1).\n"
 msgstr ""
 
-#: resize/resize.ml:415 resize/resize.ml:412
+#: resize/resize.ml:421 resize/resize.ml:418
 msgid "%s: file is too small to be a disk image (%Ld bytes)"
 msgstr ""
 
-#: builder/index_parser.ml:76
+#: builder/index_parser.ml:81
 msgid "%s: index is corrupt: %s: field ‘%s[%s]’ appears two or more times\n"
 msgstr ""
 
-#: builder/index_parser.ml:78
+#: builder/index_parser.ml:84
 msgid "%s: index is corrupt: %s: field ‘%s’ appears two or more times\n"
 msgstr ""
 
-#: builder/index_parser.ml:60
+#: builder/index_parser.ml:63
 msgid ""
 "%s: index is corrupt: os-version ‘%s’ with architecture ‘%s’ appears two or "
 "more times\n"
 msgstr ""
 
-#: resize/resize.ml:852
+#: resize/resize.ml:890
 msgid ""
 "%s: logical volume not found in the source disk image (this error came from "
 "‘--lv-expand’ option on the command line).  Try running this command: virt-"
 "filesystems --logical-volumes --long -a %s"
 msgstr ""
 
-#: resize/resize.ml:725
+#: resize/resize.ml:757
 msgid "%s: missing size field in ‘%s’ option"
 msgstr ""
 
-#: resize/resize.ml:734
+#: resize/resize.ml:766
 msgid "%s: new partition size is zero or negative"
 msgstr ""
 
-#: builder/index_parser.ml:109
+#: builder/index_parser.ml:118
 msgid "%s: no ‘arch’ entry for %s and failed to guess it\n"
 msgstr ""
 
-#: builder/index_parser.ml:116
+#: builder/index_parser.ml:126
 msgid "%s: no ‘arch’ entry for ‘%s’\n"
 msgstr ""
 
-#: builder/index_parser.ml:97
+#: builder/index_parser.ml:106
 msgid "%s: no ‘file’ (URI) entry for ‘%s’\n"
 msgstr ""
 
-#: builder/index_parser.ml:155
+#: builder/index_parser.ml:167
 msgid "%s: no ‘size’ field for ‘%s’\n"
 msgstr ""
 
@@ -293,38 +309,38 @@ msgstr ""
 msgid "%s: no ‘uri’ entry for ‘%s’ in %s, skipping it\n"
 msgstr ""
 
-#: common/mltools/tools_utils.ml:714
+#: common/mltools/tools_utils.ml:717
 msgid "%s: operation timed out"
 msgstr ""
 
-#: resize/resize.ml:646
+#: resize/resize.ml:657
 msgid "%s: partition already deleted, you cannot use it in ‘%s’ option"
 msgstr ""
 
-#: resize/resize.ml:642
+#: resize/resize.ml:652
 msgid "%s: partition already ignored, you cannot use it in ‘%s’ option"
 msgstr ""
 
-#: resize/resize.ml:638
+#: resize/resize.ml:645
 msgid ""
 "%s: partition not found in the source disk image (this error came from ‘%s’ "
 "option on the command line).  Try running this command: virt-filesystems --"
 "partitions --long -a %s"
 msgstr ""
 
-#: resize/resize.ml:543
+#: resize/resize.ml:550
 msgid "%s: partition size %Ld < filesystem size %Ld"
 msgstr ""
 
-#: resize/resize.ml:538
+#: resize/resize.ml:545
 msgid "%s: partition size %Ld < physical volume size %Ld"
 msgstr ""
 
-#: resize/resize.ml:450
+#: resize/resize.ml:457
 msgid "%s: physical volume not returned by pvs_full"
 msgstr ""
 
-#: sysprep/main.ml:141
+#: sysprep/main.ml:142
 msgid ""
 "%s: reset or unconfigure a virtual machine so clones can be made\n"
 "\n"
@@ -336,7 +352,7 @@ msgid ""
 "read the man page virt-sysprep(1).\n"
 msgstr ""
 
-#: resize/resize.ml:219
+#: resize/resize.ml:221
 msgid ""
 "%s: resize a virtual machine disk\n"
 "\n"
@@ -366,63 +382,63 @@ msgid ""
 "read the man page virt-sparsify(1).\n"
 msgstr ""
 
-#: builder/builder.ml:322
+#: builder/builder.ml:339
 msgid ""
 "%s: template not downloaded or deleted.  You may have run ‘virt-builder --"
 "delete-cache’ in parallel."
 msgstr ""
 
-#: resize/resize.ml:680
+#: resize/resize.ml:692
 msgid "%s: this partition has already been ignored or deleted"
 msgstr ""
 
-#: resize/resize.ml:676
+#: resize/resize.ml:688
 msgid "%s: this partition has already been marked for resizing"
 msgstr ""
 
-#: resize/resize.ml:553
+#: resize/resize.ml:560
 msgid "%s: this partition overlaps the previous one"
 msgstr ""
 
-#: resize/resize.ml:427
+#: resize/resize.ml:433
 msgid ""
 "%s: unknown partition table type\n"
 "virt-resize only supports MBR (DOS) and GPT partition tables."
 msgstr ""
 
-#: common/mltools/tools_utils.ml:190
+#: common/mltools/tools_utils.ml:191
 msgid "%s: warning: %s"
 msgstr ""
 
-#: builder/index_parser.ml:250
+#: builder/index_parser.ml:265
 msgid "%s: you must use relative paths (not ‘%s’) in the index file\n"
 msgstr ""
 
-#: builder/index_parser.ml:242
+#: builder/index_parser.ml:257
 msgid "%s: zero length path in the index file\n"
 msgstr ""
 
-#. common/mlcustomize/customize_cmdline.ml:331
-#. common/mlcustomize/customize_cmdline.ml:240
-#: customize/customize_cmdline.ml:331 customize/customize_cmdline.ml:240
+#. common/mlcustomize/customize_cmdline.ml:351
+#. common/mlcustomize/customize_cmdline.ml:248
+#: customize/customize_cmdline.ml:351 customize/customize_cmdline.ml:248
 msgid "'CMD+ARGS'"
 msgstr ""
 
-#: get-kernel/get_kernel.ml:40
+#: get-kernel/get_kernel.ml:40 drivers/drivers.ml:36
 msgid "--add option can only be given once"
 msgstr ""
 
-#: customize/customize_run.ml:206
+#: customize/customize_run.ml:141
 msgid ""
 "--append-line: line must not contain newline characters.  Use the --append-"
 "line option multiple times to add several lines."
 msgstr ""
 
-#: customize/customize_main.ml:112
+#: customize/customize_main.ml:116
 msgid "--attach-format parameter must appear before --attach parameter"
 msgstr ""
 
-#: builder/cmdline.ml:266
+#: builder/cmdline.ml:270
 msgid ""
 "--cache-all-templates/--print-cache/--delete-cache does not need any extra "
 "arguments"
@@ -432,7 +448,7 @@ msgstr ""
 msgid "--check-tmpdir: unknown argument ‘%s’"
 msgstr ""
 
-#: sparsify/copying.ml:73
+#: sparsify/copying.ml:74
 msgid ""
 "--compress cannot be used for raw output.  Remove this option or use --"
 "convert qcow2."
@@ -442,52 +458,60 @@ msgstr ""
 msgid "--debug parameter must be >= 0"
 msgstr ""
 
-#: sysprep/main.ml:66 get-kernel/get_kernel.ml:48
-#: customize/customize_main.ml:70
+#. customize/customize_main.ml:74
+#: sysprep/main.ml:68 get-kernel/get_kernel.ml:49 drivers/drivers.ml:45
 msgid "--domain option can only be given once"
 msgstr ""
 
-#: sysprep/main.ml:76
+#: sysprep/main.ml:78
 msgid "--enable option can only be given once"
 msgstr ""
 
-#: sysprep/main.ml:84
+#: sysprep/main.ml:86
 msgid "--enable: ‘%s’ is not a known operation"
 msgstr ""
 
-#: resize/resize.ml:173
+#: resize/resize.ml:174
 msgid "--expand option given more than once"
 msgstr ""
 
-#: sysprep/main.ml:156 customize/customize_main.ml:109
+#: sysprep/main.ml:157 customize/customize_main.ml:113
 msgid "--format parameter must appear before -a parameter"
 msgstr ""
 
-#: builder/cmdline.ml:274
+#: builder/cmdline.ml:280
 msgid "--get-kernel: too many parameters"
 msgstr ""
 
-#: customize/customize_run.ml:101 customize/customize_run.ml:99
-msgid "--install"
+#: customize/customize_run.ml:214
+msgid ""
+"--inject-qemu-ga: QEMU Guest Agent MSI not found in virtio-win source that "
+"you specified"
+msgstr ""
+
+#: customize/customize_run.ml:230
+msgid ""
+"--inject-virtio-win: virtio drivers were not found for this Windows version "
+"in the virtio-win source that you specified"
 msgstr ""
 
-#: builder/cmdline.ml:245
+#: builder/cmdline.ml:247
 msgid "--list: use ‘--list-format’, not ‘--format’"
 msgstr ""
 
-#: builder/cmdline.ml:258
+#: builder/cmdline.ml:262
 msgid "--notes: too many parameters, expecting ‘os-version’"
 msgstr ""
 
-#: sysprep/main.ml:103
+#: sysprep/main.ml:105
 msgid "--operations: empty operation name"
 msgstr ""
 
-#: sysprep/main.ml:114
+#: sysprep/main.ml:117
 msgid "--operations: ‘%s’ is not a known operation"
 msgstr ""
 
-#: get-kernel/get_kernel.ml:52
+#: get-kernel/get_kernel.ml:53
 msgid "--prefix option can only be given once"
 msgstr ""
 
@@ -495,41 +519,33 @@ msgstr ""
 msgid "--scriptdir cannot be used more than once"
 msgstr ""
 
-#: resize/resize.ml:188
+#: resize/resize.ml:190
 msgid "--shrink option given more than once"
 msgstr ""
 
-#: sparsify/copying.ml:93
+#: sparsify/copying.ml:95
 msgid ""
 "--tmp parameter must point to a directory, block device or prebuilt file"
 msgstr ""
 
-#: sparsify/copying.ml:84
+#: sparsify/copying.ml:86
 msgid "--tmp prebuilt:file: %s: file does not exist"
 msgstr ""
 
-#: sparsify/copying.ml:89
+#: sparsify/copying.ml:91
 msgid "--tmp prebuilt:file: %s: file does not have backing file"
 msgstr ""
 
-#: sparsify/copying.ml:87
+#: sparsify/copying.ml:89
 msgid "--tmp prebuilt:file: %s: file format is not qcow2"
 msgstr ""
 
-#: customize/customize_run.ml:155 customize/customize_run.ml:153
-msgid "--uninstall"
-msgstr ""
-
-#: customize/customize_run.ml:131 customize/customize_run.ml:129
-msgid "--update"
-msgstr ""
-
 #: dib/cmdline.ml:241
 msgid "-B must be specified"
 msgstr ""
 
-#: sysprep/main.ml:123 get-kernel/get_kernel.ml:56
-#: customize/customize_main.ml:75
+#. customize/customize_main.ml:79
+#: sysprep/main.ml:126 get-kernel/get_kernel.ml:57 drivers/drivers.ml:50
 msgid "Add disk image file"
 msgstr ""
 
@@ -545,13 +561,13 @@ msgstr ""
 msgid "Add new a elements location"
 msgstr ""
 
-#: customize/customize_cmdline.ml:269
-#: common/mlcustomize/customize_cmdline.ml:269
+#: customize/customize_cmdline.ml:289
+#: common/mlcustomize/customize_cmdline.ml:289
 msgid "Add package(s) to install"
 msgstr ""
 
-#: customize/customize_cmdline.ml:252
-#: common/mlcustomize/customize_cmdline.ml:252
+#: customize/customize_cmdline.ml:260
+#: common/mlcustomize/customize_cmdline.ml:260
 msgid "Add package(s) to install at first boot"
 msgstr ""
 
@@ -563,24 +579,24 @@ msgstr ""
 msgid "Aliases:"
 msgstr ""
 
-#: resize/resize.ml:195
+#: resize/resize.ml:197
 msgid "Align first partition (default: auto)"
 msgstr ""
 
-#: builder/repository_main.ml:214
+#: builder/repository_main.ml:216
 msgid "Allowed characters are letters, digits, - _ and ."
 msgstr ""
 
-#: builder/repository_main.ml:277
+#: builder/repository_main.ml:282
 msgid "Already existing image with id %s and architecture %s"
 msgstr ""
 
-#: customize/customize_cmdline.ml:168
-#: common/mlcustomize/customize_cmdline.ml:168
+#: customize/customize_cmdline.ml:176
+#: common/mlcustomize/customize_cmdline.ml:176
 msgid "Append line(s) to the file"
 msgstr ""
 
-#: customize/customize_run.ml:208
+#: customize/customize_run.ml:145
 msgid "Appending line to %s"
 msgstr ""
 
@@ -588,7 +604,7 @@ msgstr ""
 msgid "Architecture:"
 msgstr ""
 
-#: builder/repository_main.ml:221
+#: builder/repository_main.ml:224
 msgid "Architecture: "
 msgstr ""
 
@@ -596,20 +612,20 @@ msgstr ""
 msgid "Ask the user about missing data"
 msgstr ""
 
-#: customize/customize_main.ml:76 builder/cmdline.ml:130
+#: customize/customize_main.ml:80 builder/cmdline.ml:130
 msgid "Attach data disk/ISO during install"
 msgstr ""
 
-#: customize/customize_cmdline.ml:349
-#: common/mlcustomize/customize_cmdline.ml:349
+#: customize/customize_cmdline.ml:369
+#: common/mlcustomize/customize_cmdline.ml:369
 msgid "Attach to a subscription-manager pool"
 msgstr ""
 
-#: customize/customize_run.ml:310
+#: customize/customize_run.ml:274
 msgid "Attaching to compatible subscriptions"
 msgstr ""
 
-#: customize/customize_run.ml:314
+#: customize/customize_run.ml:278
 msgid "Attaching to the pool %s"
 msgstr ""
 
@@ -617,13 +633,13 @@ msgstr ""
 msgid "Base path of diskimage-builder library"
 msgstr ""
 
-#: sparsify/copying.ml:344
+#: sparsify/copying.ml:348
 msgid ""
 "Before deleting the old disk, carefully check that the target disk boots and "
 "works correctly."
 msgstr ""
 
-#: resize/resize.ml:214
+#: resize/resize.ml:216
 msgid "Behaviour on expand unknown filesystems (default: warn)"
 msgstr ""
 
@@ -648,7 +664,7 @@ msgstr ""
 msgid "Carry/set this environment variable"
 msgstr ""
 
-#: sysprep/sysprep_operation_lvm_uuids.ml:44
+#: sysprep/sysprep_operation_lvm_uuids.ml:84
 msgid "Change LVM2 PV and VG UUIDs"
 msgstr ""
 
@@ -656,12 +672,12 @@ msgstr ""
 msgid "Change filesystem UUIDs"
 msgstr ""
 
-#: customize/customize_cmdline.ml:179
-#: common/mlcustomize/customize_cmdline.ml:179
+#: customize/customize_cmdline.ml:187
+#: common/mlcustomize/customize_cmdline.ml:187
 msgid "Change the permissions of a file"
 msgstr ""
 
-#: customize/customize_run.ml:212
+#: customize/customize_run.ml:149
 msgid "Changing permissions of %s to %s"
 msgstr ""
 
@@ -673,18 +689,19 @@ msgstr ""
 msgid "Check there is enough space in $TMPDIR"
 msgstr ""
 
-#: builder/repository_main.ml:200
+#: builder/repository_main.ml:202
 msgid ""
 "Choose one from the list below:\n"
 " %s\n"
 msgstr ""
 
-#: sparsify/in_place.ml:124 sparsify/copying.ml:275
+#: sparsify/in_place.ml:127 sparsify/copying.ml:279
 msgid "Clearing Linux swap on %s"
 msgstr ""
 
-#: sysprep/main.ml:136
-msgid "Compatibility option, does nothing"
+#: customize/customize_cmdline.ml:490
+#: common/mlcustomize/customize_cmdline.ml:490
+msgid "Compatibility option doing nothing"
 msgstr ""
 
 #: sparsify/cmdline.ml:69
@@ -703,11 +720,11 @@ msgstr ""
 msgid "Compressing the image as tar.gz"
 msgstr ""
 
-#: builder/builder.ml:683
+#: builder/builder.ml:710
 msgid "Converting %s to %s"
 msgstr ""
 
-#: builder/builder.ml:682
+#: builder/builder.ml:709
 msgid "Converting to %s"
 msgstr ""
 
@@ -719,56 +736,56 @@ msgstr ""
 msgid "Converting to qcow2"
 msgstr ""
 
-#: customize/customize_cmdline.ml:201
-#: common/mlcustomize/customize_cmdline.ml:201
+#: customize/customize_cmdline.ml:209
+#: common/mlcustomize/customize_cmdline.ml:209
 msgid "Copy files in disk image"
 msgstr ""
 
-#: customize/customize_cmdline.ml:212
-#: common/mlcustomize/customize_cmdline.ml:212
+#: customize/customize_cmdline.ml:220
+#: common/mlcustomize/customize_cmdline.ml:220
 msgid "Copy local files or directories into image"
 msgstr ""
 
-#: builder/builder.ml:618
+#: builder/builder.ml:643
 msgid "Copying"
 msgstr ""
 
-#: resize/resize.ml:1246
+#: resize/resize.ml:1301
 msgid "Copying %s"
 msgstr ""
 
-#: customize/customize_run.ml:229
+#: customize/customize_run.ml:166
 msgid "Copying (in image): %s to %s"
 msgstr ""
 
-#: customize/customize_run.ml:233
+#: customize/customize_run.ml:170
 msgid "Copying: %s to %s"
 msgstr ""
 
-#: customize/customize_cmdline.ml:286
-#: common/mlcustomize/customize_cmdline.ml:286
+#: customize/customize_cmdline.ml:306
+#: common/mlcustomize/customize_cmdline.ml:306
 msgid "Create a directory"
 msgstr ""
 
-#: sparsify/copying.ml:149
+#: sparsify/copying.ml:152
 msgid "Create overlay device %s to protect source disk"
 msgstr ""
 
-#: sparsify/copying.ml:147
+#: sparsify/copying.ml:150
 msgid "Create overlay file in %s to protect source disk"
 msgstr ""
 
-#: customize/customize_cmdline.ml:280
-#: common/mlcustomize/customize_cmdline.ml:280
+#: customize/customize_cmdline.ml:300
+#: common/mlcustomize/customize_cmdline.ml:300
 msgid "Create symbolic links"
 msgstr ""
 
-#: builder/repository_main.ml:559
+#: builder/repository_main.ml:566
 msgid "Creating index backup copy"
 msgstr ""
 
-#: customize/customize_cmdline.ml:474
-#: common/mlcustomize/customize_cmdline.ml:474
+#: customize/customize_cmdline.ml:500
+#: common/mlcustomize/customize_cmdline.ml:500
 msgid "Credentials for subscription-manager"
 msgstr ""
 
@@ -796,17 +813,17 @@ msgid ""
 "for installing packages, editing files and so on."
 msgstr ""
 
-#: customize/customize_cmdline.ml:285
-#: common/mlcustomize/customize_cmdline.ml:285
+#: customize/customize_cmdline.ml:305
+#: common/mlcustomize/customize_cmdline.ml:305
 msgid "DIR"
 msgstr ""
 
-#: customize/customize_cmdline.ml:218
-#: common/mlcustomize/customize_cmdline.ml:218
+#: customize/customize_cmdline.ml:226
+#: common/mlcustomize/customize_cmdline.ml:226
 msgid "Delete a file or directory"
 msgstr ""
 
-#: resize/resize.ml:199
+#: resize/resize.ml:201
 msgid "Delete partition"
 msgstr ""
 
@@ -814,15 +831,15 @@ msgstr ""
 msgid "Delete the template cache"
 msgstr ""
 
-#: customize/customize_run.ml:237 builder/builder.ml:138
+#: customize/customize_run.ml:174 builder/builder.ml:139
 msgid "Deleting: %s"
 msgstr ""
 
-#: dib/cmdline.ml:188 customize/customize_main.ml:85 builder/cmdline.ml:158
+#: dib/cmdline.ml:188 customize/customize_main.ml:89 builder/cmdline.ml:158
 msgid "Disable appliance network"
 msgstr ""
 
-#: sysprep/main.ml:134
+#: sysprep/main.ml:137
 msgid "Disable appliance network (default)"
 msgstr ""
 
@@ -834,7 +851,7 @@ msgstr ""
 msgid "Disable template cache"
 msgstr ""
 
-#: sparsify/in_place.ml:159
+#: sparsify/in_place.ml:163
 msgid "Discard space in volgroup %s"
 msgstr ""
 
@@ -846,11 +863,11 @@ msgstr ""
 msgid "Display installation notes"
 msgstr ""
 
-#: builder/repository_main.ml:284
+#: builder/repository_main.ml:290
 msgid "Display name: "
 msgstr ""
 
-#: common/mltools/tools_utils.ml:384
+#: common/mltools/tools_utils.ml:385
 msgid "Display version and exit"
 msgstr ""
 
@@ -862,6 +879,11 @@ msgstr ""
 msgid "Do not fsync output file on exit"
 msgstr ""
 
+#: customize/customize_cmdline.ml:484
+#: common/mlcustomize/customize_cmdline.ml:484
+msgid "Do not relabel files with correct SELinux labels"
+msgstr ""
+
 #: builder/cmdline.ml:168
 msgid "Do not warn if writing to a partition"
 msgstr ""
@@ -874,11 +896,11 @@ msgstr ""
 msgid "Don’t compress the new images in the index"
 msgstr ""
 
-#: resize/resize.ml:197
+#: resize/resize.ml:199
 msgid "Don’t copy boot loader"
 msgstr ""
 
-#: resize/resize.ml:202
+#: resize/resize.ml:204
 msgid "Don’t create extra partition"
 msgstr ""
 
@@ -886,19 +908,19 @@ msgstr ""
 msgid "Don’t delete output file on failure"
 msgstr ""
 
-#: resize/resize.ml:201
+#: resize/resize.ml:203
 msgid "Don’t expand content"
 msgstr ""
 
-#: resize/resize.ml:206
+#: resize/resize.ml:208
 msgid "Don’t perform changes"
 msgstr ""
 
-#: common/mltools/tools_utils.ml:388
+#: common/mltools/tools_utils.ml:389
 msgid "Don’t print progress messages"
 msgstr ""
 
-#: common/mltools/tools_utils.ml:405
+#: common/mltools/tools_utils.ml:420
 msgid "Don’t turn off echo for passphrases"
 msgstr ""
 
@@ -910,16 +932,16 @@ msgstr ""
 msgid "Download size:"
 msgstr ""
 
-#: builder/builder.ml:304 builder/builder.ml:256
+#: builder/builder.ml:315 builder/builder.ml:263
 msgid "Downloading: %s"
 msgstr ""
 
-#: customize/customize_cmdline.ml:229
-#: common/mlcustomize/customize_cmdline.ml:229
+#: customize/customize_cmdline.ml:237
+#: common/mlcustomize/customize_cmdline.ml:237
 msgid "Edit file using Perl expression"
 msgstr ""
 
-#: customize/customize_run.ml:241
+#: customize/customize_run.ml:178
 msgid "Editing: %s"
 msgstr ""
 
@@ -927,43 +949,43 @@ msgstr ""
 msgid "Elements: %s"
 msgstr ""
 
-#: sysprep/main.ml:133
+#: sysprep/main.ml:136
 msgid "Enable appliance network"
 msgstr ""
 
-#: dib/cmdline.ml:187 customize/customize_main.ml:84 builder/cmdline.ml:157
+#: dib/cmdline.ml:187 customize/customize_main.ml:88 builder/cmdline.ml:157
 msgid "Enable appliance network (default)"
 msgstr ""
 
-#: resize/resize.ml:198
+#: resize/resize.ml:200
 msgid "Enable debugging messages"
 msgstr ""
 
-#: common/mltools/tools_utils.ml:385
+#: common/mltools/tools_utils.ml:386
 msgid "Enable libguestfs debugging messages"
 msgstr ""
 
-#: sysprep/main.ml:129
+#: sysprep/main.ml:132
 msgid "Enable specific operations"
 msgstr ""
 
-#: common/mltools/tools_utils.ml:386
+#: common/mltools/tools_utils.ml:387
 msgid "Enable tracing of libguestfs calls"
 msgstr ""
 
-#: sysprep/main.ml:137
+#: sysprep/main.ml:138
 msgid "Enable/disable specific operations"
 msgstr ""
 
-#: sparsify/copying.ml:177
+#: sparsify/copying.ml:180
 msgid "Examine source disk"
 msgstr ""
 
-#: resize/resize.ml:379
+#: resize/resize.ml:385
 msgid "Examining %s"
 msgstr ""
 
-#: sysprep/main.ml:209 customize/customize_main.ml:155
+#: sysprep/main.ml:213 customize/customize_main.ml:161
 msgid "Examining the guest ..."
 msgstr ""
 
@@ -975,19 +997,19 @@ msgstr ""
 msgid "Exclude the specified script"
 msgstr ""
 
-#: resize/resize.ml:205
+#: resize/resize.ml:207
 msgid "Expand logical volume"
 msgstr ""
 
-#: resize/resize.ml:200
+#: resize/resize.ml:202
 msgid "Expand partition"
 msgstr ""
 
-#: builder/repository_main.ml:312 builder/repository_main.ml:305
+#: builder/repository_main.ml:318 builder/repository_main.ml:311
 msgid "Expandable partition: "
 msgstr ""
 
-#: builder/repository_main.ml:331 builder/repository_main.ml:324
+#: builder/repository_main.ml:337 builder/repository_main.ml:330
 msgid "Expandable volume: "
 msgstr ""
 
@@ -995,15 +1017,15 @@ msgstr ""
 msgid "Expanded elements: %s"
 msgstr ""
 
-#: resize/resize.ml:1413
+#: resize/resize.ml:1469
 msgid "Expanding %s using the ‘%s’ method"
 msgstr ""
 
-#: resize/resize.ml:1394
+#: resize/resize.ml:1450
 msgid "Expanding %s%s using the ‘%s’ method"
 msgstr ""
 
-#: builder/repository_main.ml:232
+#: builder/repository_main.ml:236
 msgid "Extracting data from the image..."
 msgstr ""
 
@@ -1011,40 +1033,40 @@ msgstr ""
 msgid "Extracting data out of the image"
 msgstr ""
 
-#. customize/customize_cmdline.ml:337
-#. common/mlcustomize/customize_cmdline.ml:402
-#. common/mlcustomize/customize_cmdline.ml:384
-#. common/mlcustomize/customize_cmdline.ml:337
-#: customize/customize_cmdline.ml:402 customize/customize_cmdline.ml:384
+#. customize/customize_cmdline.ml:357
+#. common/mlcustomize/customize_cmdline.ml:422
+#. common/mlcustomize/customize_cmdline.ml:404
+#. common/mlcustomize/customize_cmdline.ml:357
+#: customize/customize_cmdline.ml:422 customize/customize_cmdline.ml:404
 msgid "FILE"
 msgstr ""
 
-#: customize/customize_cmdline.ml:437
-#: common/mlcustomize/customize_cmdline.ml:437
+#: customize/customize_cmdline.ml:457
+#: common/mlcustomize/customize_cmdline.ml:457
 msgid "FILE:CONTENT"
 msgstr ""
 
-#: customize/customize_cmdline.ml:426
-#: common/mlcustomize/customize_cmdline.ml:426
+#: customize/customize_cmdline.ml:446
+#: common/mlcustomize/customize_cmdline.ml:446
 msgid "FILE:DEST"
 msgstr ""
 
-#: customize/customize_cmdline.ml:224
-#: common/mlcustomize/customize_cmdline.ml:224
+#: customize/customize_cmdline.ml:232
+#: common/mlcustomize/customize_cmdline.ml:232
 msgid "FILE:EXPR"
 msgstr ""
 
-#: customize/customize_cmdline.ml:163
-#: common/mlcustomize/customize_cmdline.ml:163
+#: customize/customize_cmdline.ml:171
+#: common/mlcustomize/customize_cmdline.ml:171
 msgid "FILE:LINE"
 msgstr ""
 
-#: customize/customize_cmdline.ml:185
-#: common/mlcustomize/customize_cmdline.ml:185
+#: customize/customize_cmdline.ml:193
+#: common/mlcustomize/customize_cmdline.ml:193
 msgid "FILENAME"
 msgstr ""
 
-#: resize/resize.ml:1041
+#: resize/resize.ml:1092
 msgid ""
 "Failed to initialize the partition table on the target disk.  You need to "
 "wipe or recreate the target disk and then run virt-resize again.\n"
@@ -1056,11 +1078,11 @@ msgstr ""
 msgid "Filesystem for the image"
 msgstr ""
 
-#: sparsify/copying.ml:260
+#: sparsify/copying.ml:264
 msgid "Fill free space in %s with zero"
 msgstr ""
 
-#: sparsify/copying.ml:308
+#: sparsify/copying.ml:312
 msgid "Fill free space in volgroup %s with zero"
 msgstr ""
 
@@ -1072,11 +1094,11 @@ msgstr ""
 msgid "Fingerprint: %s\n"
 msgstr ""
 
-#: customize/customize_main.ml:198 builder/builder.ml:768
+#: customize/customize_main.ml:208 builder/builder.ml:797
 msgid "Finishing off"
 msgstr ""
 
-#: resize/resize.ml:1292
+#: resize/resize.ml:1348
 msgid "Fixing first NTFS partition boot record"
 msgstr ""
 
@@ -1084,8 +1106,8 @@ msgstr ""
 msgid "Flag the system for reconfiguration"
 msgstr ""
 
-#. sysprep/sysprep_operation_net_hostname.ml:54
-#: sysprep/sysprep_operation_net_hwaddr.ml:52
+#. sysprep/sysprep_operation_net_hostname.ml:56
+#: sysprep/sysprep_operation_net_hwaddr.ml:53
 msgid ""
 "For Fedora and Red Hat Enterprise Linux,\n"
 "this is removed from C<ifcfg-*> files."
@@ -1098,15 +1120,16 @@ msgid ""
 "as the root password and timezone."
 msgstr ""
 
-#: resize/resize.ml:207
+#: resize/resize.ml:209
 msgid "Force ntfsresize"
 msgstr ""
 
-#: resize/resize.ml:210
+#: resize/resize.ml:212
 msgid "Forcefully resize partition"
 msgstr ""
 
-#: sparsify/cmdline.ml:71 resize/resize.ml:203 get-kernel/get_kernel.ml:60
+#. drivers/drivers.ml:54
+#: sparsify/cmdline.ml:71 resize/resize.ml:205 get-kernel/get_kernel.ml:61
 msgid "Format of input disk"
 msgstr ""
 
@@ -1114,7 +1137,7 @@ msgstr ""
 msgid "Format of optional drive"
 msgstr ""
 
-#: resize/resize.ml:208
+#: resize/resize.ml:210
 msgid "Format of output disk"
 msgstr ""
 
@@ -1122,11 +1145,11 @@ msgstr ""
 msgid "Format of output disk (default: same as input)"
 msgstr ""
 
-#: builder/repository_main.ml:494
+#: builder/repository_main.ml:501
 msgid "Found new images: %s"
 msgstr ""
 
-#: builder/builder.ml:758
+#: builder/builder.ml:787
 msgid "Free space"
 msgstr ""
 
@@ -1134,25 +1157,25 @@ msgstr ""
 msgid "Full name:"
 msgstr ""
 
-#: builder/sigchecker.ml:111
+#: builder/sigchecker.ml:114
 msgid ""
 "GPG failure: could not run GPG the first time\n"
 "Use the ‘-v’ option and look for earlier error messages."
 msgstr ""
 
-#: builder/sigchecker.ml:65
+#: builder/sigchecker.ml:66
 msgid ""
 "GPG failure: could not trust the imported key\n"
 "Use the ‘-v’ option and look for earlier error messages."
 msgstr ""
 
-#: builder/sigchecker.ml:204
+#: builder/sigchecker.ml:215
 msgid ""
 "GPG failure: could not verify digital signature of file\n"
 "Try:\n"
 " - Use the ‘-v’ option and look for earlier error messages.\n"
-" - Delete the cache: virt-builder --delete-cache\n"
-" - Check no one has tampered with the website or your network!"
+"- Delete the cache: virt-builder --delete-cache\n"
+"- Check no one has tampered with the website or your network!"
 msgstr ""
 
 #: dib/cmdline.ml:172
@@ -1167,8 +1190,8 @@ msgstr ""
 msgid "Get kernel from image"
 msgstr ""
 
-#: customize/customize_cmdline.ml:257
-#: common/mlcustomize/customize_cmdline.ml:257
+#: customize/customize_cmdline.ml:265
+#: common/mlcustomize/customize_cmdline.ml:265
 msgid "HOSTNAME"
 msgstr ""
 
@@ -1176,11 +1199,11 @@ msgstr ""
 msgid "ID of the GPG key to sign the repo with"
 msgstr ""
 
-#: builder/repository_main.ml:212
+#: builder/repository_main.ml:214
 msgid "Identifier: "
 msgstr ""
 
-#: common/mltools/tools_utils.ml:176
+#: common/mltools/tools_utils.ml:177
 msgid ""
 "If reporting bugs, run %s with debugging enabled and include the complete "
 "output:\n"
@@ -1192,7 +1215,7 @@ msgstr ""
 msgid "Ignore filesystem"
 msgstr ""
 
-#: resize/resize.ml:204
+#: resize/resize.ml:206
 msgid "Ignore partition"
 msgstr ""
 
@@ -1200,32 +1223,42 @@ msgstr ""
 msgid "Importing the image to docker as ‘%s’"
 msgstr ""
 
-#: sysprep/sysprep_operation_ca_certificates.ml:55
+#: sysprep/sysprep_operation_ca_certificates.ml:56
 msgid "In case any certificate is removed, the system CA store is updated."
 msgstr ""
 
-#: customize/customize_cmdline.ml:379
-#: common/mlcustomize/customize_cmdline.ml:379
+#: customize/customize_cmdline.ml:399
+#: common/mlcustomize/customize_cmdline.ml:399
 msgid "Inject a public key into the guest"
 msgstr ""
 
+#: customize/customize_cmdline.ml:272
+#: common/mlcustomize/customize_cmdline.ml:272
+msgid "Inject the QEMU Guest Agent into a Windows guest"
+msgstr ""
+
+#: customize/customize_cmdline.ml:278
+#: common/mlcustomize/customize_cmdline.ml:278
+msgid "Inject virtio-win drivers into a Windows guest"
+msgstr ""
+
 #: dib/cmdline.ml:166
 msgid "Installation type"
 msgstr ""
 
-#: customize/customize_run.ml:252
+#: customize/customize_run.ml:189
 msgid "Installing firstboot command: %s"
 msgstr ""
 
-#: customize/customize_run.ml:256
+#: customize/customize_run.ml:193
 msgid "Installing firstboot packages: %s"
 msgstr ""
 
-#: customize/customize_run.ml:263
+#: customize/customize_run.ml:200
 msgid "Installing firstboot script: %s"
 msgstr ""
 
-#: customize/customize_run.ml:273
+#: customize/customize_run.ml:237
 msgid "Installing packages: %s"
 msgstr ""
 
@@ -1237,8 +1270,8 @@ msgstr ""
 msgid "Key: %s\n"
 msgstr ""
 
-#: customize/customize_cmdline.ml:207
-#: common/mlcustomize/customize_cmdline.ml:207
+#: customize/customize_cmdline.ml:215
+#: common/mlcustomize/customize_cmdline.ml:215
 msgid "LOCALPATH:REMOTEDIR"
 msgstr ""
 
@@ -1246,7 +1279,7 @@ msgstr ""
 msgid "Label for the root fs"
 msgstr ""
 
-#: customize/customize_run.ml:280
+#: customize/customize_run.ml:244
 msgid "Linking: %s -> %s"
 msgstr ""
 
@@ -1254,7 +1287,7 @@ msgstr ""
 msgid "List available templates"
 msgstr ""
 
-#: sysprep/main.ml:131
+#: sysprep/main.ml:134
 msgid "List supported operations"
 msgstr ""
 
@@ -1262,15 +1295,21 @@ msgstr ""
 msgid "Location for cached images"
 msgstr ""
 
+#. common/mlcustomize/customize_cmdline.ml:277
+#. common/mlcustomize/customize_cmdline.ml:271
+#: customize/customize_cmdline.ml:277 customize/customize_cmdline.ml:271
+msgid "METHOD"
+msgstr ""
+
 #: dib/cmdline.ml:176
 msgid "Main element for building ramdisks"
 msgstr ""
 
-#: common/mltools/tools_utils.ml:411
+#: common/mltools/tools_utils.ml:426
 msgid "Make output machine readable"
 msgstr ""
 
-#: customize/customize_run.ml:285
+#: customize/customize_run.ml:249
 msgid "Making directory: %s"
 msgstr ""
 
@@ -1282,20 +1321,20 @@ msgstr ""
 msgid "Modify the disk image in-place"
 msgstr ""
 
-#: sysprep/sysprep_operation_script.ml:135
+#: sysprep/sysprep_operation_script.ml:137
 msgid "Mount point on host"
 msgstr ""
 
-#: customize/customize_cmdline.ml:297
-#: common/mlcustomize/customize_cmdline.ml:297
+#: customize/customize_cmdline.ml:317
+#: common/mlcustomize/customize_cmdline.ml:317
 msgid "Move files in disk image"
 msgstr ""
 
-#: builder/repository_main.ml:568
+#: builder/repository_main.ml:575
 msgid "Moving files to final destination"
 msgstr ""
 
-#: customize/customize_run.ml:289
+#: customize/customize_run.ml:253
 msgid "Moving: %s -> %s"
 msgstr ""
 
@@ -1303,7 +1342,7 @@ msgstr ""
 msgid "Name of the image"
 msgstr ""
 
-#: builder/repository_main.ml:490
+#: builder/repository_main.ml:497
 msgid "No new image found"
 msgstr ""
 
@@ -1322,13 +1361,19 @@ msgstr ""
 msgid "On Fedora and Red Hat Enterprise Linux, remove the C<"
 msgstr ""
 
-#: sysprep/sysprep_operation_lvm_uuids.ml:45
+#: sysprep/sysprep_operation_lvm_uuids.ml:85
 msgid ""
 "On Linux guests that have LVM2 physical volumes (PVs) or volume groups "
 "(VGs),\n"
 "new random UUIDs are generated and assigned to those PVs and VGs."
 msgstr ""
 
+#: sysprep/sysprep_operation_lvm_system_devices.ml:36
+msgid ""
+"On Linux guests, LVM2's scanning for physical volumes (PVs) may be "
+"restricted to those block devices whose WWIDs are listed in C<"
+msgstr ""
+
 #. sysprep/sysprep_operation_logfiles.ml:149
 #: sysprep/sysprep_operation_passwd_backups.ml:48
 msgid ""
@@ -1343,7 +1388,7 @@ msgid ""
 "new random UUIDs are generated and assigned to filesystems."
 msgstr ""
 
-#: common/mlcustomize/firstboot.ml:253
+#: common/mlcustomize/firstboot.ml:254
 msgid ""
 "One of rhsrvany.exe or pvvxsvc.exe is missing in %s.  One of them is "
 "required in order to install Windows firstboot scripts.  You can get one by "
@@ -1354,7 +1399,7 @@ msgstr ""
 msgid "Opening the disks"
 msgstr ""
 
-#: builder/builder.ml:695
+#: builder/builder.ml:722
 msgid "Opening the new disk"
 msgstr ""
 
@@ -1366,15 +1411,15 @@ msgstr ""
 msgid "Output architecture"
 msgstr ""
 
-#: get-kernel/get_kernel.ml:61
+#: get-kernel/get_kernel.ml:62
 msgid "Output directory"
 msgstr ""
 
-#: builder/builder.ml:753
+#: builder/builder.ml:782
 msgid "Output file"
 msgstr ""
 
-#: builder/builder.ml:755
+#: builder/builder.ml:784
 msgid "Output format"
 msgstr ""
 
@@ -1386,26 +1431,26 @@ msgstr ""
 msgid "Output formats"
 msgstr ""
 
-#: builder/builder.ml:754
+#: builder/builder.ml:783
 msgid "Output size"
 msgstr ""
 
-#. common/mlcustomize/customize_cmdline.ml:390
-#. common/mlcustomize/customize_cmdline.ml:217
-#: customize/customize_cmdline.ml:390 customize/customize_cmdline.ml:217
+#. common/mlcustomize/customize_cmdline.ml:410
+#. common/mlcustomize/customize_cmdline.ml:225
+#: customize/customize_cmdline.ml:410 customize/customize_cmdline.ml:225
 msgid "PATH"
 msgstr ""
 
-#: customize/customize_cmdline.ml:174
-#: common/mlcustomize/customize_cmdline.ml:174
+#: customize/customize_cmdline.ml:182
+#: common/mlcustomize/customize_cmdline.ml:182
 msgid "PERMISSIONS:FILE"
 msgstr ""
 
-#. customize/customize_cmdline.ml:247
-#. common/mlcustomize/customize_cmdline.ml:409
-#. common/mlcustomize/customize_cmdline.ml:264
-#. common/mlcustomize/customize_cmdline.ml:247
-#: customize/customize_cmdline.ml:409 customize/customize_cmdline.ml:264
+#. customize/customize_cmdline.ml:255
+#. common/mlcustomize/customize_cmdline.ml:429
+#. common/mlcustomize/customize_cmdline.ml:284
+#. common/mlcustomize/customize_cmdline.ml:255
+#: customize/customize_cmdline.ml:429 customize/customize_cmdline.ml:284
 msgid "PKG,PKG.."
 msgstr ""
 
@@ -1417,23 +1462,23 @@ msgstr ""
 msgid "POD notes for %s must not end with newline"
 msgstr ""
 
-#: sysprep/main.ml:126 customize/customize_main.ml:81
+#: sysprep/main.ml:129 customize/customize_main.ml:85
 msgid "Perform a dry run"
 msgstr ""
 
-#: sysprep/sysprep_operation.ml:318 sysprep/sysprep_operation.ml:297
+#: sysprep/sysprep_operation.ml:319 sysprep/sysprep_operation.ml:298
 msgid "Performing %S ..."
 msgstr ""
 
-#: builder/builder.ml:556
+#: builder/builder.ml:578
 msgid "Planning how to build this image"
 msgstr ""
 
-#: get-kernel/get_kernel.ml:63
+#: get-kernel/get_kernel.ml:64
 msgid "Prefix for files"
 msgstr ""
 
-#: builder/repository_main.ml:184
+#: builder/repository_main.ml:186
 msgid "Preparing %s"
 msgstr ""
 
@@ -1445,38 +1490,33 @@ msgstr ""
 msgid "Print info about template cache"
 msgstr ""
 
-#: customize/customize_cmdline.ml:190
-#: common/mlcustomize/customize_cmdline.ml:190
+#: customize/customize_cmdline.ml:198
+#: common/mlcustomize/customize_cmdline.ml:198
 msgid "Read customize commands from file"
 msgstr ""
 
-#: common/mltools/tools_utils.ml:406
+#: common/mltools/tools_utils.ml:421
 msgid "Read passphrases from stdin"
 msgstr ""
 
-#: customize/customize_cmdline.ml:391
-#: common/mlcustomize/customize_cmdline.ml:391
+#: customize/customize_cmdline.ml:411
+#: common/mlcustomize/customize_cmdline.ml:411
 msgid "Recursively truncate all files in directory"
 msgstr ""
 
-#: customize/customize_run.ml:354
+#: customize/customize_run.ml:320
 msgid "Recursively truncating: %s"
 msgstr ""
 
-#: customize/customize_cmdline.ml:355
-#: common/mlcustomize/customize_cmdline.ml:355
+#: customize/customize_cmdline.ml:375
+#: common/mlcustomize/customize_cmdline.ml:375
 msgid "Register using subscription-manager"
 msgstr ""
 
-#: customize/customize_run.ml:320
+#: customize/customize_run.ml:284
 msgid "Registering with subscription-manager"
 msgstr ""
 
-#: customize/customize_cmdline.ml:464
-#: common/mlcustomize/customize_cmdline.ml:464
-msgid "Relabel files with correct SELinux labels"
-msgstr ""
-
 #: sysprep/sysprep_operation_ssh_userdir.ml:38
 msgid "Remove \".ssh\" directories in the guest"
 msgstr ""
@@ -1485,7 +1525,7 @@ msgstr ""
 msgid "Remove /etc/passwd- and similar backup files"
 msgstr ""
 
-#: sysprep/sysprep_operation_ca_certificates.ml:54
+#: sysprep/sysprep_operation_ca_certificates.ml:55
 msgid "Remove CA certificates in the guest"
 msgstr ""
 
@@ -1501,11 +1541,11 @@ msgstr ""
 msgid "Remove Dovecot (mail server) data"
 msgstr ""
 
-#: sysprep/sysprep_operation_net_hostname.ml:53
+#: sysprep/sysprep_operation_net_hostname.ml:54
 msgid "Remove HOSTNAME and DHCP_HOSTNAME in network interface configuration"
 msgstr ""
 
-#: sysprep/sysprep_operation_net_hwaddr.ml:51
+#: sysprep/sysprep_operation_net_hwaddr.ml:52
 msgid "Remove HWADDR (hard-coded MAC address) configuration"
 msgstr ""
 
@@ -1513,7 +1553,11 @@ msgstr ""
 msgid "Remove Kerberos data in the guest"
 msgstr ""
 
-#: sysprep/sysprep_operation_ipa_client.ml:57
+#: sysprep/sysprep_operation_lvm_system_devices.ml:34
+msgid "Remove LVM2 system.devices file"
+msgstr ""
+
+#: sysprep/sysprep_operation_ipa_client.ml:58
 msgid ""
 "Remove all the files related to an IPA (Identity, Policy, Audit) system.\n"
 "This effectively unenrolls the guest from an IPA server without interacting\n"
@@ -1522,8 +1566,8 @@ msgid ""
 "This operation does not run C<ipa-client>."
 msgstr ""
 
-#: customize/customize_cmdline.ml:361
-#: common/mlcustomize/customize_cmdline.ml:361
+#: customize/customize_cmdline.ml:381
+#: common/mlcustomize/customize_cmdline.ml:381
 msgid "Remove all the subscriptions"
 msgstr ""
 
@@ -1571,7 +1615,7 @@ msgid ""
 "users who have a C<.ssh> directory in their home directory."
 msgstr ""
 
-#: sysprep/sysprep_operation_ipa_client.ml:56
+#: sysprep/sysprep_operation_ipa_client.ml:57
 msgid "Remove the IPA files"
 msgstr ""
 
@@ -1647,7 +1691,7 @@ msgstr ""
 msgid "Remove the local machine ID"
 msgstr ""
 
-#: sysprep/sysprep_operation_pacct_log.ml:56
+#: sysprep/sysprep_operation_pacct_log.ml:57
 msgid "Remove the process accounting log files"
 msgstr ""
 
@@ -1682,7 +1726,7 @@ msgstr ""
 msgid "Remove user at-jobs and cron-jobs"
 msgstr ""
 
-#: customize/customize_run.ml:333
+#: customize/customize_run.ml:299
 msgid "Removing all the subscriptions"
 msgstr ""
 
@@ -1690,21 +1734,21 @@ msgstr ""
 msgid "Repo and tag for docker"
 msgstr ""
 
-#: resize/resize.ml:1443
+#: resize/resize.ml:1499
 msgid ""
 "Resize operation completed with no errors.  Before deleting the old disk, "
 "carefully check that the resized disk boots and works correctly."
 msgstr ""
 
-#: resize/resize.ml:209
+#: resize/resize.ml:211
 msgid "Resize partition"
 msgstr ""
 
-#: builder/builder.ml:643
+#: builder/builder.ml:668
 msgid "Resizing (using virt-resize) to expand the disk to %s"
 msgstr ""
 
-#: builder/builder.ml:669
+#: builder/builder.ml:695
 msgid "Resizing container (but not filesystems) to expand the disk to %s"
 msgstr ""
 
@@ -1712,27 +1756,27 @@ msgstr ""
 msgid "Run arbitrary scripts against the guest"
 msgstr ""
 
-#: customize/customize_cmdline.ml:241
-#: common/mlcustomize/customize_cmdline.ml:241
+#: customize/customize_cmdline.ml:249
+#: common/mlcustomize/customize_cmdline.ml:249
 msgid "Run command at first guest boot"
 msgstr ""
 
-#: customize/customize_cmdline.ml:332
-#: common/mlcustomize/customize_cmdline.ml:332
+#: customize/customize_cmdline.ml:352
+#: common/mlcustomize/customize_cmdline.ml:352
 msgid "Run command in disk image"
 msgstr ""
 
-#: customize/customize_cmdline.ml:235
-#: common/mlcustomize/customize_cmdline.ml:235
+#: customize/customize_cmdline.ml:243
+#: common/mlcustomize/customize_cmdline.ml:243
 msgid "Run script at first guest boot"
 msgstr ""
 
-#: customize/customize_cmdline.ml:326
-#: common/mlcustomize/customize_cmdline.ml:326
+#: customize/customize_cmdline.ml:346
+#: common/mlcustomize/customize_cmdline.ml:346
 msgid "Run script in disk image"
 msgstr ""
 
-#: sysprep/sysprep_operation_script.ml:150
+#: sysprep/sysprep_operation_script.ml:154
 msgid ""
 "Run the named C<SCRIPT> (a shell script or program) against the\n"
 "guest.  The script can be any program on the host.  The script’s\n"
@@ -1742,16 +1786,16 @@ msgid ""
 "the full absolute path to the script."
 msgstr ""
 
-#: customize/customize_cmdline.ml:403
-#: common/mlcustomize/customize_cmdline.ml:403
+#: customize/customize_cmdline.ml:423
+#: common/mlcustomize/customize_cmdline.ml:423
 msgid "Run touch on a file"
 msgstr ""
 
-#: customize/customize_run.ml:363
+#: customize/customize_run.ml:329
 msgid "Running touch: %s"
 msgstr ""
 
-#: customize/customize_run.ml:299 customize/customize_run.ml:220
+#: customize/customize_run.ml:263 customize/customize_run.ml:157
 msgid "Running: %s"
 msgstr ""
 
@@ -1759,58 +1803,58 @@ msgstr ""
 msgid "Running: %s/%s"
 msgstr ""
 
-#. common/mlcustomize/customize_cmdline.ml:325
-#. common/mlcustomize/customize_cmdline.ml:234
-#: customize/customize_cmdline.ml:325 customize/customize_cmdline.ml:234
+#. common/mlcustomize/customize_cmdline.ml:345
+#. common/mlcustomize/customize_cmdline.ml:242
+#: customize/customize_cmdline.ml:345 customize/customize_cmdline.ml:242
 msgid "SCRIPT"
 msgstr ""
 
-#. customize/customize_cmdline.ml:315
-#. common/mltools/tools_utils.ml:407
-#. common/mlcustomize/customize_cmdline.ml:470
-#. common/mlcustomize/customize_cmdline.ml:344
-#. common/mlcustomize/customize_cmdline.ml:315
-#: customize/customize_cmdline.ml:470 customize/customize_cmdline.ml:344
+#. customize/customize_cmdline.ml:335
+#. common/mltools/tools_utils.ml:422
+#. common/mlcustomize/customize_cmdline.ml:496
+#. common/mlcustomize/customize_cmdline.ml:364
+#. common/mlcustomize/customize_cmdline.ml:335
+#: customize/customize_cmdline.ml:496 customize/customize_cmdline.ml:364
 msgid "SELECTOR"
 msgstr ""
 
-#: customize/customize_run.ml:419
+#: customize/customize_run.ml:385
 msgid "SELinux relabelling"
 msgstr ""
 
-#. common/mlcustomize/customize_cmdline.ml:292
-#. common/mlcustomize/customize_cmdline.ml:196
-#: customize/customize_cmdline.ml:292 customize/customize_cmdline.ml:196
+#. common/mlcustomize/customize_cmdline.ml:312
+#. common/mlcustomize/customize_cmdline.ml:204
+#: customize/customize_cmdline.ml:312 customize/customize_cmdline.ml:204
 msgid "SOURCE:DEST"
 msgstr ""
 
-#: customize/customize_run.ml:347
+#: customize/customize_run.ml:313
 msgid "SSH key could not be injected for this type of guest"
 msgstr ""
 
-#: customize/customize_run.ml:344
+#: customize/customize_run.ml:310
 msgid "SSH key inject: %s"
 msgstr ""
 
-#: sysprep/sysprep_operation_script.ml:148
+#: sysprep/sysprep_operation_script.ml:152
 msgid "Script or program to run on guest"
 msgstr ""
 
-#: customize/customize_cmdline.ml:338
-#: common/mlcustomize/customize_cmdline.ml:338
+#: customize/customize_cmdline.ml:358
+#: common/mlcustomize/customize_cmdline.ml:358
 msgid "Scrub a file"
 msgstr ""
 
-#: customize/customize_cmdline.ml:448
-#: common/mlcustomize/customize_cmdline.ml:448
+#: customize/customize_cmdline.ml:468
+#: common/mlcustomize/customize_cmdline.ml:468
 msgid "Scrub build log file"
 msgstr ""
 
-#: customize/customize_run.ml:430
+#: customize/customize_run.ml:396
 msgid "Scrubbing the log file"
 msgstr ""
 
-#: customize/customize_run.ml:304
+#: customize/customize_run.ml:268
 msgid "Scrubbing: %s"
 msgstr ""
 
@@ -1822,7 +1866,7 @@ msgstr ""
 msgid "Set Python interpreter"
 msgstr ""
 
-#: customize/customize_main.ml:78 builder/cmdline.ml:132
+#: customize/customize_main.ml:82 builder/cmdline.ml:132
 msgid "Set attach disk format"
 msgstr ""
 
@@ -1834,33 +1878,33 @@ msgstr ""
 msgid "Set debug level"
 msgstr ""
 
-#: get-kernel/get_kernel.ml:57
+#: get-kernel/get_kernel.ml:58 drivers/drivers.ml:51
 msgid "Set disk sector size"
 msgstr ""
 
-#: sysprep/main.ml:130 customize/customize_main.ml:82
+#: sysprep/main.ml:133 customize/customize_main.ml:86
 msgid "Set format (default: auto)"
 msgstr ""
 
-#: sysprep/main.ml:124 get-kernel/get_kernel.ml:58
-#: customize/customize_main.ml:79
+#. customize/customize_main.ml:83
+#: sysprep/main.ml:127 get-kernel/get_kernel.ml:59 drivers/drivers.ml:52
 msgid "Set libvirt URI"
 msgstr ""
 
-#: sysprep/main.ml:125 get-kernel/get_kernel.ml:59
-#: customize/customize_main.ml:80
+#. customize/customize_main.ml:84
+#: sysprep/main.ml:128 get-kernel/get_kernel.ml:60 drivers/drivers.ml:53
 msgid "Set libvirt guest name"
 msgstr ""
 
-#: dib/cmdline.ml:186 customize/customize_main.ml:83 builder/cmdline.ml:156
+#: dib/cmdline.ml:186 customize/customize_main.ml:87 builder/cmdline.ml:156
 msgid "Set memory size"
 msgstr ""
 
-#: sysprep/main.ml:132
+#: sysprep/main.ml:135
 msgid "Set mount options (eg /:noatime;/var:rw,noatime)"
 msgstr ""
 
-#: dib/cmdline.ml:189 customize/customize_main.ml:86 builder/cmdline.ml:164
+#: dib/cmdline.ml:189 customize/customize_main.ml:90 builder/cmdline.ml:164
 msgid "Set number of vCPUs"
 msgstr ""
 
@@ -1872,21 +1916,21 @@ msgstr ""
 msgid "Set output filename"
 msgstr ""
 
-#: resize/resize.ml:196
+#: resize/resize.ml:198
 msgid "Set partition alignment (default: 128 sectors)"
 msgstr ""
 
-#: customize/customize_cmdline.ml:458
-#: common/mlcustomize/customize_cmdline.ml:458
+#: customize/customize_cmdline.ml:478
+#: common/mlcustomize/customize_cmdline.ml:478
 msgid "Set password crypto"
 msgstr ""
 
-#: common/mltools/tools_utils.ml:415
+#: common/mltools/tools_utils.ml:430
 msgid "Set program name"
 msgstr ""
 
-#: customize/customize_cmdline.ml:320
-#: common/mlcustomize/customize_cmdline.ml:320
+#: customize/customize_cmdline.ml:340
+#: common/mlcustomize/customize_cmdline.ml:340
 msgid "Set root password"
 msgstr ""
 
@@ -1902,8 +1946,8 @@ msgstr ""
 msgid "Set temporary block device, directory or prebuilt file"
 msgstr ""
 
-#: customize/customize_cmdline.ml:397
-#: common/mlcustomize/customize_cmdline.ml:397
+#: customize/customize_cmdline.ml:417
+#: common/mlcustomize/customize_cmdline.ml:417
 msgid "Set the default timezone"
 msgstr ""
 
@@ -1911,8 +1955,8 @@ msgstr ""
 msgid "Set the format for --list (default: short)"
 msgstr ""
 
-#: customize/customize_cmdline.ml:258
-#: common/mlcustomize/customize_cmdline.ml:258
+#: customize/customize_cmdline.ml:266
+#: common/mlcustomize/customize_cmdline.ml:266
 msgid "Set the hostname"
 msgstr ""
 
@@ -1920,36 +1964,36 @@ msgstr ""
 msgid "Set the output architecture"
 msgstr ""
 
-#: customize/customize_cmdline.ml:309
-#: common/mlcustomize/customize_cmdline.ml:309
+#: customize/customize_cmdline.ml:329
+#: common/mlcustomize/customize_cmdline.ml:329
 msgid "Set user password"
 msgstr ""
 
-#: customize/customize_run.ml:166
+#: customize/customize_run.ml:83
 msgid "Setting a random seed"
 msgstr ""
 
-#: customize/customize_run.ml:410
+#: customize/customize_run.ml:376
 msgid "Setting passwords"
 msgstr ""
 
-#: customize/password.ml:111
+#: customize/password.ml:113
 msgid "Setting random password of %s to %s"
 msgstr ""
 
-#: customize/customize_run.ml:268
+#: customize/customize_run.ml:205
 msgid "Setting the hostname: %s"
 msgstr ""
 
-#: customize/customize_run.ml:181
+#: customize/customize_run.ml:98
 msgid "Setting the machine ID in %s"
 msgstr ""
 
-#: customize/customize_run.ml:358
+#: customize/customize_run.ml:324
 msgid "Setting the timezone: %s"
 msgstr ""
 
-#: resize/resize.ml:1017
+#: resize/resize.ml:1068
 msgid "Setting up initial partition table on %s"
 msgstr ""
 
@@ -1961,11 +2005,11 @@ msgstr ""
 msgid "Shortcut for --list-format long"
 msgstr ""
 
-#: resize/resize.ml:211
+#: resize/resize.ml:213
 msgid "Shrink partition"
 msgstr ""
 
-#: builder/repository_main.ml:545
+#: builder/repository_main.ml:552
 msgid "Signing index with the GPG key %s"
 msgstr ""
 
@@ -1973,11 +2017,11 @@ msgstr ""
 msgid "Skip the inclusion of the ‘base’ element"
 msgstr ""
 
-#: sparsify/copying.ml:256
+#: sparsify/copying.ml:260
 msgid "Skipping %s, as it is a read-only btrfs snapshot."
 msgstr ""
 
-#: sparsify/copying.ml:258
+#: sparsify/copying.ml:262
 msgid "Skipping %s, as it is a read-only device."
 msgstr ""
 
@@ -1985,25 +2029,25 @@ msgstr ""
 msgid "Source URI: %s\n"
 msgstr ""
 
-#: sparsify/in_place.ml:182
+#: sparsify/in_place.ml:186
 msgid "Sparsify in-place operation completed with no errors"
 msgstr ""
 
-#: sparsify/copying.ml:342
+#: sparsify/copying.ml:346
 msgid "Sparsify operation completed with no errors."
 msgstr ""
 
-#: common/mltools/tools_utils.ml:407
+#: common/mltools/tools_utils.ml:422
 msgid "Specify a LUKS key"
 msgstr ""
 
-#: customize/customize_cmdline.ml:275
-#: common/mlcustomize/customize_cmdline.ml:275
+#: customize/customize_cmdline.ml:295
+#: common/mlcustomize/customize_cmdline.ml:295
 msgid "TARGET:LINK[:LINK..]"
 msgstr ""
 
-#: customize/customize_cmdline.ml:396
-#: common/mlcustomize/customize_cmdline.ml:396
+#: customize/customize_cmdline.ml:416
+#: common/mlcustomize/customize_cmdline.ml:416
 msgid "TIMEZONE"
 msgstr ""
 
@@ -2071,7 +2115,7 @@ msgid ""
 "See: L<https://bugzilla.redhat.com/show_bug.cgi?id=991641>"
 msgstr ""
 
-#: builder/index_parser.ml:30
+#: builder/index_parser.ml:31
 msgid ""
 "The index file downloaded from ‘%s’ is corrupt.\n"
 "You need to ask the supplier of this file to fix it and upload a fixed "
@@ -2086,7 +2130,7 @@ msgid ""
 "found to be empty."
 msgstr ""
 
-#: sysprep/sysprep_operation_script.ml:137
+#: sysprep/sysprep_operation_script.ml:139
 msgid ""
 "The mount point (an empty directory on the host) used when\n"
 "the C<script> operation is enabled and one or more scripts\n"
@@ -2098,13 +2142,13 @@ msgid ""
 "will be created."
 msgstr ""
 
-#: sysprep/sysprep_operation_pacct_log.ml:57
+#: sysprep/sysprep_operation_pacct_log.ml:58
 msgid ""
 "The system wide process accounting will store to the pacct\n"
 "log files if the process accounting is on."
 msgstr ""
 
-#: sysprep/sysprep_operation_user_account.ml:129
+#: sysprep/sysprep_operation_user_account.ml:133
 msgid ""
 "The user accounts to be kept in the guest.\n"
 "The value of this option is a list of user names separated by comma,\n"
@@ -2118,7 +2162,7 @@ msgid ""
 "This option can be specified multiple times."
 msgstr ""
 
-#: sysprep/sysprep_operation_user_account.ml:114
+#: sysprep/sysprep_operation_user_account.ml:116
 msgid ""
 "The user accounts to be removed from the guest.\n"
 "The value of this option is a list of user names separated by comma,\n"
@@ -2132,11 +2176,11 @@ msgid ""
 "This option can be specified multiple times."
 msgstr ""
 
-#: builder/builder.ml:280
+#: builder/builder.ml:287
 msgid "There are no notes for %s\n"
 msgstr ""
 
-#: resize/resize.ml:837
+#: resize/resize.ml:873
 msgid ""
 "There is a deficit of %Ld bytes (%s).  You need to make the target disk "
 "larger by at least this amount or adjust your resizing requests."
@@ -2148,11 +2192,11 @@ msgid ""
 "%s/%s in: %s"
 msgstr ""
 
-#: resize/resize.ml:977
+#: resize/resize.ml:1026
 msgid "There is a surplus of %s."
 msgstr ""
 
-#: sparsify/copying.ml:109
+#: sparsify/copying.ml:112
 msgid ""
 "There may not be enough free space on %s.\n"
 "You may need to set TMPDIR to point to a directory with more free space.\n"
@@ -2188,38 +2232,38 @@ msgstr ""
 msgid "This removes temporary files under C</tmp> and C</var/tmp>."
 msgstr ""
 
-#: builder/builder.ml:756
+#: builder/builder.ml:785
 msgid "Total usable space"
 msgstr ""
 
-#: sparsify/in_place.ml:102
+#: sparsify/in_place.ml:103
 msgid "Trimming %s"
 msgstr ""
 
-#: customize/customize_cmdline.ml:385
-#: common/mlcustomize/customize_cmdline.ml:385
+#: customize/customize_cmdline.ml:405
+#: common/mlcustomize/customize_cmdline.ml:405
 msgid "Truncate a file to zero size"
 msgstr ""
 
-#: customize/customize_run.ml:350
+#: customize/customize_run.ml:316
 msgid "Truncating: %s"
 msgstr ""
 
-#: resize/resize.ml:212
+#: resize/resize.ml:214
 msgid "Turn off sparse copying"
 msgstr ""
 
-#: customize/customize_cmdline.ml:303
-#: common/mlcustomize/customize_cmdline.ml:303
+#: customize/customize_cmdline.ml:323
+#: common/mlcustomize/customize_cmdline.ml:323
 msgid "USER:SELECTOR"
 msgstr ""
 
-#: customize/customize_cmdline.ml:373
-#: common/mlcustomize/customize_cmdline.ml:373
+#: customize/customize_cmdline.ml:393
+#: common/mlcustomize/customize_cmdline.ml:393
 msgid "USER[:SELECTOR]"
 msgstr ""
 
-#: resize/resize.ml:1381
+#: resize/resize.ml:1437
 msgid "UUID in swap partition %s changed from ‘%s’ to ‘%s’"
 msgstr ""
 
@@ -2227,63 +2271,63 @@ msgstr ""
 msgid "Umounting the disks"
 msgstr ""
 
-#: builder/builder.ml:631
+#: builder/builder.ml:656
 msgid "Uncompressing"
 msgstr ""
 
-#: customize/customize_cmdline.ml:414
-#: common/mlcustomize/customize_cmdline.ml:414
+#: customize/customize_cmdline.ml:434
+#: common/mlcustomize/customize_cmdline.ml:434
 msgid "Uninstall package(s)"
 msgstr ""
 
-#: customize/customize_run.ml:367
+#: customize/customize_run.ml:333
 msgid "Uninstalling packages: %s"
 msgstr ""
 
-#: customize/customize_cmdline.ml:367
-#: common/mlcustomize/customize_cmdline.ml:367
+#: customize/customize_cmdline.ml:387
+#: common/mlcustomize/customize_cmdline.ml:387
 msgid "Unregister using subscription-manager"
 msgstr ""
 
-#: customize/customize_run.ml:338
+#: customize/customize_run.ml:304
 msgid "Unregistering with subscription-manager"
 msgstr ""
 
-#: customize/customize_cmdline.ml:420
-#: common/mlcustomize/customize_cmdline.ml:420
+#: customize/customize_cmdline.ml:440
+#: common/mlcustomize/customize_cmdline.ml:440
 msgid "Update packages"
 msgstr ""
 
-#: customize/customize_run.ml:372
+#: customize/customize_run.ml:338
 msgid "Updating packages"
 msgstr ""
 
-#: customize/customize_cmdline.ml:431
-#: common/mlcustomize/customize_cmdline.ml:431
+#: customize/customize_cmdline.ml:451
+#: common/mlcustomize/customize_cmdline.ml:451
 msgid "Upload local file to destination"
 msgstr ""
 
-#: customize/customize_run.ml:377
+#: customize/customize_run.ml:343
 msgid "Uploading: %s to %s"
 msgstr ""
 
-#: common/mltools/tools_utils.ml:390
+#: common/mltools/tools_utils.ml:391
 msgid "Use ANSI colour sequences even if not tty"
 msgstr ""
 
-#: get-kernel/get_kernel.ml:62
+#: get-kernel/get_kernel.ml:63
 msgid "Use unversioned names for files"
 msgstr ""
 
-#: sysprep/sysprep_operation_user_account.ml:127
+#: sysprep/sysprep_operation_user_account.ml:131
 msgid "Users to keep"
 msgstr ""
 
-#: sysprep/sysprep_operation_user_account.ml:112
+#: sysprep/sysprep_operation_user_account.ml:114
 msgid "Users to remove"
 msgstr ""
 
-#: sparsify/copying.ml:151
+#: sparsify/copying.ml:154
 msgid "Using prebuilt file %s as overlay"
 msgstr ""
 
@@ -2293,26 +2337,26 @@ msgid ""
 "‘convert’"
 msgstr ""
 
-#: common/mltools/tools_utils.ml:391
+#: common/mltools/tools_utils.ml:392
 msgid "Wrap log messages even if not tty"
 msgstr ""
 
-#: customize/customize_cmdline.ml:442
-#: common/mlcustomize/customize_cmdline.ml:442
+#: customize/customize_cmdline.ml:462
+#: common/mlcustomize/customize_cmdline.ml:462
 msgid "Write file"
 msgstr ""
 
-#: customize/customize_run.ml:402
+#: customize/customize_run.ml:368
 msgid "Writing: %s"
 msgstr ""
 
-#: resize/resize.ml:808
+#: resize/resize.ml:841
 msgid ""
 "You cannot use --expand when there is no surplus space to expand into.  You "
 "need to make the target disk larger by at least %s."
 msgstr ""
 
-#: resize/resize.ml:820
+#: resize/resize.ml:855
 msgid ""
 "You cannot use --shrink when there is no deficit (see ‘deficit’ in the virt-"
 "resize(1) man page)."
@@ -2328,11 +2372,11 @@ msgstr ""
 msgid "Zero filesystem"
 msgstr ""
 
-#: sparsify/in_place.ml:91 sparsify/copying.ml:246
+#: sparsify/in_place.ml:92 sparsify/copying.ml:250
 msgid "Zeroing %s"
 msgstr ""
 
-#: resize/resize.ml:255
+#: resize/resize.ml:259
 msgid "alignment cannot be < 1"
 msgstr ""
 
@@ -2352,7 +2396,7 @@ msgstr ""
 msgid "btrfs-filesystem-resize"
 msgstr ""
 
-#: builder/builder.ml:175
+#: builder/builder.ml:182
 msgid "cache %s: %s"
 msgstr ""
 
@@ -2374,14 +2418,14 @@ msgid ""
 "Use --list to list available guest types."
 msgstr ""
 
-#: common/mlcustomize/firstboot.ml:235
+#: common/mlcustomize/firstboot.ml:236
 msgid ""
 "cannot finish firstboot installation by running ‘%s’ because host cpu (%s) "
 "and guest arch (%s) are not compatible.  The firstboot service may not run "
 "at boot."
 msgstr ""
 
-#: builder/builder.ml:369
+#: builder/builder.ml:387
 msgid "cannot output to a character device or /dev/null"
 msgstr ""
 
@@ -2389,7 +2433,7 @@ msgstr ""
 msgid "cannot set random UUID on filesystem %s type %s: %s"
 msgstr ""
 
-#: customize/customize_run.ml:159
+#: common/mlcustomize/guest_packages.ml:29
 msgid ""
 "cannot use ‘%s’ because no package manager has been detected for this guest "
 "OS.\n"
@@ -2399,30 +2443,50 @@ msgid ""
 "\n"
 "For OSes such as Windows that lack package management, this is not "
 "possible.  Try using one of the ‘--firstboot*’ flags instead (described in "
-"the manual)."
+"the virt-customize(1) manual)."
 msgstr ""
 
-#: customize/customize_cmdline.ml:494
-#: common/mlcustomize/customize_cmdline.ml:494
+#: customize/customize_cmdline.ml:520
+#: common/mlcustomize/customize_cmdline.ml:520
 msgid "command '%s' cannot be used in command files, see the man page"
 msgstr ""
 
-#: customize/customize_cmdline.ml:511
-#: common/mlcustomize/customize_cmdline.ml:511
+#: customize/customize_cmdline.ml:537
+#: common/mlcustomize/customize_cmdline.ml:537
 msgid "command '%s' not valid, see the man page"
 msgstr ""
 
-#: builder/sigchecker.ml:124
+#: common/mldrivers/linux_bootloaders.ml:318
+msgid "could not add grub2 serial console (ignored)"
+msgstr ""
+
+#: common/mldrivers/linux_bootloaders.ml:221
+msgid "could not determine a way to update the configuration of Grub2"
+msgstr ""
+
+#: builder/sigchecker.ml:128
 msgid ""
 "could not export public key\n"
 "Use the ‘-v’ option and look for earlier error messages."
 msgstr ""
 
-#: builder/builder.ml:142
+#: common/mldrivers/linux_bootloaders.ml:376
+msgid "could not find bootloader mount point (%s): %s"
+msgstr ""
+
+#: builder/builder.ml:143
 msgid "could not find cache directory. Is $HOME set?"
 msgstr ""
 
-#: common/mlcustomize/firstboot.ml:232
+#: common/mldrivers/windows_drivers.ml:91
+msgid ""
+"could not find registry entry "
+"HKEY_LOCAL_MACHINE\\SYSTEM\\DriverDatabase\\DeviceIds in this Windows "
+"guest.  It may be either a very old or very new version of Windows that we "
+"cannot process."
+msgstr ""
+
+#: common/mlcustomize/firstboot.ml:233
 msgid ""
 "could not finish firstboot installation by running ‘%s’ because the command "
 "failed: %s"
@@ -2434,11 +2498,22 @@ msgid ""
 "Use the ‘-v’ option and look for earlier error messages."
 msgstr ""
 
+#: common/mldrivers/linux_bootloaders.ml:336
+msgid ""
+"could not rebuild grub2 configuration file (%s).  This may mean that grub "
+"output will not be sent to the serial port, but otherwise should be "
+"harmless.  Original error message: %s"
+msgstr ""
+
+#: common/mldrivers/linux_bootloaders.ml:320
+msgid "could not remove grub2 serial console (ignored)"
+msgstr ""
+
 #: builder/downloader.ml:92
 msgid "cp (download) command failed copying ‘%s’"
 msgstr ""
 
-#: builder/builder.ml:161
+#: builder/builder.ml:168
 msgid "curl is not installed (or does not work)"
 msgstr ""
 
@@ -2454,15 +2529,19 @@ msgid ""
 "This could be a bug in %s."
 msgstr ""
 
-#: sysprep/sysprep_operation_script.ml:135
+#: common/mldrivers/linux_bootloaders.ml:126
+msgid "didn't find grub entry for kernel %s"
+msgstr ""
+
+#: sysprep/sysprep_operation_script.ml:136
 msgid "dir"
 msgstr ""
 
-#: get-kernel/get_kernel.ml:61
+#: get-kernel/get_kernel.ml:62
 msgid "directory"
 msgstr ""
 
-#: builder/builder.ml:176
+#: builder/builder.ml:183
 msgid "disabling the cache"
 msgstr ""
 
@@ -2474,7 +2553,7 @@ msgstr ""
 msgid "disallowed character (%c) in operation name"
 msgstr ""
 
-#: sparsify/in_place.ml:67
+#: sparsify/in_place.ml:68
 msgid "discard/trim is not supported"
 msgstr ""
 
@@ -2482,12 +2561,24 @@ msgstr ""
 msgid "docker: a target was not specified, use ‘--docker-target’"
 msgstr ""
 
-#: sysprep/main.ml:125 get-kernel/get_kernel.ml:59
-#: customize/customize_main.ml:80
+#. customize/customize_main.ml:84
+#: sysprep/main.ml:128 get-kernel/get_kernel.ml:60 drivers/drivers.ml:53
 msgid "domain"
 msgstr ""
 
-#: get-kernel/get_kernel.ml:188
+#: common/mldrivers/linux.ml:176
+msgid "don’t know how to find file owner using %s"
+msgstr ""
+
+#: common/mldrivers/linux.ml:129
+msgid "don’t know how to get list of files from package using %s"
+msgstr ""
+
+#: common/mldrivers/linux.ml:56
+msgid "don’t know how to remove packages using %s: packages: %s"
+msgstr ""
+
+#: get-kernel/get_kernel.ml:192
 msgid "dual/multi-boot images are not supported by this tool"
 msgstr ""
 
@@ -2507,20 +2598,21 @@ msgstr ""
 msgid "empty --expand option"
 msgstr ""
 
-#: resize/resize.ml:187
+#: resize/resize.ml:188
 msgid "empty --shrink option"
 msgstr ""
 
+#. customize/customize_main.ml:67
 #. builder/downloader.ml:72
-#: get-kernel/get_kernel.ml:44 customize/customize_main.ml:63
+#: get-kernel/get_kernel.ml:44 drivers/drivers.ml:40
 msgid "error parsing URI '%s'. Look for error messages printed above."
 msgstr ""
 
-#: sysprep/main.ml:60 resize/resize.ml:327 resize/resize.ml:320
+#: sysprep/main.ml:61 resize/resize.ml:332 resize/resize.ml:324
 msgid "error parsing URI ‘%s’. Look for error messages printed above."
 msgstr ""
 
-#: common/mltools/tools_utils.ml:247
+#: common/mltools/tools_utils.ml:248
 msgid "exception: %s"
 msgstr ""
 
@@ -2530,51 +2622,55 @@ msgid ""
 "string: %s)"
 msgstr ""
 
-#: sparsify/copying.ml:339
+#: sparsify/copying.ml:343
 msgid "external command failed: %s"
 msgstr ""
 
-#: dib/dib.ml:998 common/mltools/tools_utils.ml:446
+#: dib/dib.ml:998 common/mltools/tools_utils.ml:451
 msgid "external command ‘%s’ exited with error %d"
 msgstr ""
 
-#: common/mltools/tools_utils.ml:527 common/mltools/tools_utils.ml:448
+#: common/mltools/tools_utils.ml:532 common/mltools/tools_utils.ml:453
 msgid "external command ‘%s’ killed by signal %d"
 msgstr ""
 
-#: common/mltools/tools_utils.ml:529 common/mltools/tools_utils.ml:450
+#: common/mltools/tools_utils.ml:534 common/mltools/tools_utils.ml:455
 msgid "external command ‘%s’ stopped by signal %d"
 msgstr ""
 
-#: builder/downloader.ml:126
+#: builder/downloader.ml:127
 msgid "failed to download %s: HTTP status code %s"
 msgstr ""
 
-#: builder/repository_main.ml:550
+#: builder/repository_main.ml:557
 msgid "failed to export the GPG key %s"
 msgstr ""
 
-#: builder/repository_main.ml:556
+#: common/mldrivers/linux_bootloaders.ml:208
+msgid "failed to find grub2-mkconfig binary (but Grub2 was detected on guest)"
+msgstr ""
+
+#: builder/repository_main.ml:563
 msgid "failed to sign index"
 msgstr ""
 
-#: common/mltools/tools_utils.ml:238
+#: common/mltools/tools_utils.ml:239
 msgid "failure: %s"
 msgstr ""
 
-#: sysprep/main.ml:123 get-kernel/get_kernel.ml:56
-#: customize/customize_main.ml:75
+#. customize/customize_main.ml:79
+#: sysprep/main.ml:126 get-kernel/get_kernel.ml:57 drivers/drivers.ml:50
 msgid "file"
 msgstr ""
 
-#: builder/sigchecker.ml:221
+#: builder/sigchecker.ml:237
 msgid ""
 "fingerprint of signature does not match the expected fingerprint!\n"
-"  found fingerprint: %s\n"
-"  expected fingerprint: %s"
+"found fingerprint: %s\n"
+"expected fingerprint: %s"
 msgstr ""
 
-#: resize/resize.ml:1290
+#: resize/resize.ml:1345
 msgid "first partition is NTFS but does not contain NTFS boot loader magic"
 msgstr ""
 
@@ -2590,12 +2686,13 @@ msgid ""
 "%s"
 msgstr ""
 
-#. resize/resize.ml:208
-#. resize/resize.ml:203
-#. get-kernel/get_kernel.ml:60
+#. resize/resize.ml:210
+#. resize/resize.ml:205
+#. get-kernel/get_kernel.ml:61
+#. drivers/drivers.ml:54
 #. dib/cmdline.ml:184
-#. customize/customize_main.ml:82
-#: sysprep/main.ml:130 sparsify/cmdline.ml:71 sparsify/cmdline.ml:70
+#. customize/customize_main.ml:86
+#: sysprep/main.ml:133 sparsify/cmdline.ml:71 sparsify/cmdline.ml:70
 msgid "format"
 msgstr ""
 
@@ -2607,21 +2704,21 @@ msgstr ""
 msgid "fs"
 msgstr ""
 
-#: sparsify/in_place.ml:108
+#: sparsify/in_place.ml:109
 msgid ""
 "fstrim operation is not supported on %s (%s).  Suppress this warning using "
 "'--ignore %s', or use copying mode instead."
 msgstr ""
 
-#: common/mltools/tools_utils.ml:257
+#: common/mltools/tools_utils.ml:258
 msgid "generated by %s %s"
 msgstr ""
 
-#: common/mlcustomize/firstboot.ml:164
+#: common/mlcustomize/firstboot.ml:165
 msgid "guest type %s is not supported"
 msgstr ""
 
-#: common/mlcustomize/firstboot.ml:370
+#: common/mlcustomize/firstboot.ml:371
 msgid "guest type %s/%s is not supported"
 msgstr ""
 
@@ -2636,43 +2733,59 @@ msgid ""
 "firstboot scripts instead."
 msgstr ""
 
-#: customize/customize_run.ml:270
+#: customize/customize_run.ml:207
 msgid "hostname could not be set for this type of guest"
 msgstr ""
 
-#: resize/resize.ml:213
+#: resize/resize.ml:215
 msgid "ignore|warn|error"
 msgstr ""
 
-#: builder/builder.ml:394
+#: common/mldrivers/linux_kernels.ml:328
+msgid "ignoring kernel %s in bootloader, as it does not exist."
+msgstr ""
+
+#: builder/builder.ml:412
 msgid ""
 "images cannot be shrunk, the output size is too small for this image.  "
 "Requested size = %s, minimum size = %s"
 msgstr ""
 
-#: builder/builder.ml:354
+#: builder/builder.ml:372
 msgid "input file (%s) has an unsupported type"
 msgstr ""
 
-#: common/mltools/tools_utils.ml:245
+#: common/mltools/tools_utils.ml:246
 msgid "internal error: Not_found exception was thrown"
 msgstr ""
 
-#: common/mltools/tools_utils.ml:242
+#: common/mltools/tools_utils.ml:243
 msgid "internal error: assertion failed at %s, line %d, char %d"
 msgstr ""
 
-#: common/mltools/tools_utils.ml:240
+#: common/mltools/tools_utils.ml:241
 msgid "internal error: invalid argument: %s"
 msgstr ""
 
-#. common/mlcustomize/customize_cmdline.ml:154
-#. common/mlcustomize/customize_cmdline.ml:143
-#: customize/customize_cmdline.ml:154 customize/customize_cmdline.ml:143
+#: common/mldrivers/linux.ml:146
+msgid "internal error: is_file_owned: dpkg command returned no output"
+msgstr ""
+
+#: common/mldrivers/linux.ml:151
+msgid "internal error: is_file_owned: unexpected output from dpkg command: %s"
+msgstr ""
+
+#: common/mldrivers/linux_bootloaders.ml:130
+msgid "internal error: regular expression did not match ‘%s’"
+msgstr ""
+
+#. common/mlcustomize/customize_cmdline.ml:162
+#. common/mlcustomize/customize_cmdline.ml:151
+#: customize/customize_cmdline.ml:162 customize/customize_cmdline.ml:151
 msgid "invalid format for '--%s' parameter, see the man page"
 msgstr ""
 
-#: common/mltools/tools_utils.ml:358
+#: common/mltools/tools_utils.ml:359
 msgid "invalid format string for --machine-readable: %s"
 msgstr ""
 
@@ -2680,26 +2793,22 @@ msgstr ""
 msgid "invalid format ‘%s’ in --formats"
 msgstr ""
 
-#: common/mltools/tools_utils.ml:373
+#: common/mltools/tools_utils.ml:374
 msgid "invalid output fd for --machine-readable: %s"
 msgstr ""
 
-#: common/mltools/tools_utils.ml:375
+#: common/mltools/tools_utils.ml:376
 msgid "invalid output for --machine-readable: %s"
 msgstr ""
 
-#: common/mltools/tools_utils.ml:367
+#: common/mltools/tools_utils.ml:368
 msgid "invalid output stream for --machine-readable: %s"
 msgstr ""
 
-#: customize/password.ml:72
+#: customize/password.ml:73
 msgid "invalid password selector ‘%s’; see the man page"
 msgstr ""
 
-#: common/mltools/tools_utils.ml:402
-msgid "invalid selector string for --key: %s"
-msgstr ""
-
 #: customize/subscription_manager.ml:54
 msgid "invalid sm-attach selector ‘%s’; see the man page"
 msgstr ""
@@ -2712,7 +2821,11 @@ msgstr ""
 msgid "invalid ssh-inject selector ‘%s’; see the man page"
 msgstr ""
 
-#: common/mltools/tools_utils.ml:236
+#: common/mldrivers/linux_bootloaders.ml:114
+msgid "kernel %s is not under grub tree %s"
+msgstr ""
+
+#: common/mltools/tools_utils.ml:237
 msgid "libguestfs error: %s"
 msgstr ""
 
@@ -2720,16 +2833,16 @@ msgstr ""
 msgid "log file %s: %s (ignored)"
 msgstr ""
 
-#: resize/resize.ml:205
+#: resize/resize.ml:207
 msgid "lv"
 msgstr ""
 
-#: customize/customize_cmdline.ml:454
-#: common/mlcustomize/customize_cmdline.ml:454
+#: customize/customize_cmdline.ml:474
+#: common/mlcustomize/customize_cmdline.ml:474
 msgid "md5|sha256|sha512"
 msgstr ""
 
-#: builder/repository_main.ml:257
+#: builder/repository_main.ml:262
 msgid "missing image identifier"
 msgstr ""
 
@@ -2745,21 +2858,21 @@ msgstr ""
 msgid "more than value for the key ‘%s’"
 msgstr ""
 
-#: builder/repository_main.ml:114
+#: builder/repository_main.ml:116
 msgid "moving file ‘%s’ to ‘%s’ failed"
 msgstr ""
 
-#: customize/customize_run.ml:194
+#: customize/customize_run.ml:111
 msgid ""
 "multiple --root-password/--password options set the password for user ‘%s’ "
 "twice"
 msgstr ""
 
-#: resize/resize.ml:195
+#: resize/resize.ml:197
 msgid "never|always|auto"
 msgstr ""
 
-#: builder/builder.ml:155
+#: builder/builder.ml:156
 msgid ""
 "no GNU Privacy Guard (GnuPG, gpg) binary was found.\n"
 "\n"
@@ -2770,29 +2883,52 @@ msgid ""
 "vulnerable to Man-In-The-Middle attacks."
 msgstr ""
 
-#: builder/builder.ml:250
+#: common/mldrivers/linux_bootloaders.ml:391
+msgid "no bootloader detected"
+msgstr ""
+
+#: builder/builder.ml:257
 msgid "no cache directory"
 msgstr ""
 
-#: builder/builder.ml:243
+#: builder/builder.ml:250
 msgid "no cache directory\n"
 msgstr ""
 
-#: builder/builder.ml:723
+#: builder/builder.ml:750
 msgid ""
 "no guest operating systems or multiboot OS found in this disk image\n"
 "This is a failure of the source repository.  Use -v for more information."
 msgstr ""
 
-#: get-kernel/get_kernel.ml:161
+#: common/mldrivers/linux_kernels.ml:181
+msgid "no initrd was found in /boot matching %s %s."
+msgstr ""
+
+#: common/mldrivers/linux_kernels.ml:303
+msgid ""
+"no installed kernel packages were found.\n"
+"\n"
+"This probably indicates that %s was unable to inspect this guest properly."
+msgstr ""
+
+#: get-kernel/get_kernel.ml:164
 msgid "no kernel found in %s"
 msgstr ""
 
-#: get-kernel/get_kernel.ml:186
+#: common/mldrivers/linux_kernels.ml:340
+msgid ""
+"no kernels were found in the bootloader configuration.\n"
+"\n"
+"This probably indicates that %s was unable to parse the bootloader "
+"configuration of this guest."
+msgstr ""
+
+#: get-kernel/get_kernel.ml:190
 msgid "no operating system found"
 msgstr ""
 
-#: sysprep/main.ml:225 customize/customize_main.ml:182
+#: sysprep/main.ml:230 customize/customize_main.ml:192
 msgid "no operating systems were found in the guest image"
 msgstr ""
 
@@ -2800,7 +2936,7 @@ msgstr ""
 msgid "no partitions found in the helper drive"
 msgstr ""
 
-#: builder/builder.ml:561
+#: builder/builder.ml:583
 msgid ""
 "no plan could be found for making a disk image with\n"
 "the required size, format etc. This is a bug in libguestfs!\n"
@@ -2811,7 +2947,7 @@ msgstr ""
 msgid "ntfsresize"
 msgstr ""
 
-#: get-kernel/get_kernel.ml:128
+#: get-kernel/get_kernel.ml:131
 msgid "operating system ‘%s’ not supported"
 msgstr ""
 
@@ -2831,7 +2967,7 @@ msgstr ""
 msgid "operation name is an empty string"
 msgstr ""
 
-#: sysprep/main.ml:137 sysprep/main.ml:129
+#: sysprep/main.ml:138 sysprep/main.ml:132
 msgid "operations"
 msgstr ""
 
@@ -2839,15 +2975,15 @@ msgstr ""
 msgid "option"
 msgstr ""
 
-#: sysprep/main.ml:132
+#: sysprep/main.ml:135
 msgid "opts"
 msgstr ""
 
-#: builder/repository_main.ml:225
+#: builder/repository_main.ml:228
 msgid "osinfo short ID: "
 msgstr ""
 
-#: builder/builder.ml:294
+#: builder/builder.ml:301
 msgid ""
 "output device (%s) is a partition.  If you are writing to a USB key or "
 "external drive then you probably need to write to the whole device, not to a "
@@ -2855,22 +2991,22 @@ msgid ""
 "if-partition"
 msgstr ""
 
-#: builder/builder.ml:397
+#: builder/builder.ml:417
 msgid ""
 "output size is too large for this block device.  Requested size = %s, output "
 "block device = %s, output block device size = %s"
 msgstr ""
 
-#: sparsify/cmdline.ml:149
+#: sparsify/cmdline.ml:150
 msgid "output ‘%s’ cannot be a character device, it must be a regular file"
 msgstr ""
 
-#. resize/resize.ml:199
-#: resize/resize.ml:211 resize/resize.ml:204 resize/resize.ml:200
+#. resize/resize.ml:201
+#: resize/resize.ml:213 resize/resize.ml:206 resize/resize.ml:202
 msgid "part"
 msgstr ""
 
-#: resize/resize.ml:210 resize/resize.ml:209
+#: resize/resize.ml:212 resize/resize.ml:211
 msgid "part=size"
 msgstr ""
 
@@ -2880,14 +3016,14 @@ msgid ""
 "or \"yescrypt\""
 msgstr ""
 
-#: customize/password.ml:192
+#: customize/password.ml:196
 msgid ""
 "password: using insecure md5 password encryption for guest of type %s "
 "version %d.%d.\n"
 "If this is incorrect, use --password-crypto option and file a bug."
 msgstr ""
 
-#: customize/customize_run.ml:415
+#: customize/customize_run.ml:381
 msgid "passwords could not be set for this type of guest"
 msgstr ""
 
@@ -2895,11 +3031,11 @@ msgstr ""
 msgid "please include an operating system element"
 msgstr ""
 
-#: resize/resize.ml:1077 resize/resize.ml:1053
+#: resize/resize.ml:1131 resize/resize.ml:1107
 msgid "pread-device: short read"
 msgstr ""
 
-#: get-kernel/get_kernel.ml:63
+#: get-kernel/get_kernel.ml:64
 msgid "prefix"
 msgstr ""
 
@@ -2907,19 +3043,19 @@ msgstr ""
 msgid "pvresize"
 msgstr ""
 
-#: sparsify/in_place.ml:133 sparsify/copying.ml:284
+#: sparsify/in_place.ml:136 sparsify/copying.ml:288
 msgid "pwrite: short write restoring swap partition header"
 msgstr ""
 
-#: sparsify/in_place.ml:186
+#: sparsify/in_place.ml:190
 msgid "quit (^C) at user request"
 msgstr ""
 
-#: customize/customize_run.ml:168
+#: customize/customize_run.ml:85
 msgid "random seed could not be set for this type of guest"
 msgstr ""
 
-#: builder/repository_main.ml:418
+#: builder/repository_main.ml:424
 msgid "repository folder ‘%s’ doesn’t exist"
 msgstr ""
 
@@ -2931,7 +3067,16 @@ msgstr ""
 msgid "resize2fs"
 msgstr ""
 
-#: sysprep/sysprep_operation_script.ml:148
+#. common/mlcustomize/inject_virtio_win.ml:335
+#: common/mlcustomize/inject_virtio_win.ml:340
+msgid ""
+"root directory ‘/’ is missing from the virtio-win directory or ISO.\n"
+"\n"
+"This should not happen and may indicate that virtio-win or virt-v2v is "
+"broken in some way.  Please report this as a bug with a full debug log."
+msgstr ""
+
+#: sysprep/sysprep_operation_script.ml:151
 msgid "script"
 msgstr ""
 
@@ -2947,19 +3092,49 @@ msgstr ""
 msgid "script: killed by signal (%d)"
 msgstr ""
 
-#: resize/resize.ml:196
+#: resize/resize.ml:198
 msgid "sectors"
 msgstr ""
 
-#: customize/customize_run.ml:162
+#: common/mltools/tools_utils.ml:417 common/options/keys.c:258
+#, c-format
+msgid "selector '%s': invalid TYPE"
+msgstr ""
+
+#: common/mltools/tools_utils.ml:409 common/options/keys.c:248
+#, c-format
+msgid "selector '%s': missing FILENAME, or too many fields"
+msgstr ""
+
+#: common/mltools/tools_utils.ml:399 common/options/keys.c:226
+#, c-format
+msgid "selector '%s': missing ID"
+msgstr ""
+
+#: common/mltools/tools_utils.ml:404 common/options/keys.c:239
+#, c-format
+msgid "selector '%s': missing KEY_STRING, or too many fields"
+msgstr ""
+
+#: common/mltools/tools_utils.ml:401 common/options/keys.c:233
+#, c-format
+msgid "selector '%s': missing TYPE"
+msgstr ""
+
+#: common/mltools/tools_utils.ml:413 common/options/keys.c:256
+#, c-format
+msgid "selector '%s': too many fields"
+msgstr ""
+
+#: common/mlcustomize/guest_packages.ml:40
 msgid ""
 "sorry, ‘%s’ with the ‘%s’ package manager has not been implemented yet.\n"
 "\n"
 "You can work around this by using one of the ‘--run*’ or ‘--firstboot*’ "
-"options instead (described in the manual)."
+"options instead (described in the virt-customize(1) manual)."
 msgstr ""
 
-#: builder/cmdline.ml:300
+#: builder/cmdline.ml:306
 msgid "source and fingerprint lists are not the same length"
 msgstr ""
 
@@ -2987,11 +3162,11 @@ msgstr ""
 msgid "sub-process killed by signal (%d)"
 msgstr ""
 
-#: customize/customize_run.ml:324
+#: customize/customize_run.ml:288
 msgid "subscription-manager credentials required for --sm-register"
 msgstr ""
 
-#: customize/customize_run.ml:64
+#: customize/customize_run.ml:67
 msgid ""
 "the command may have failed because the network is disabled.  Try either "
 "removing ‘--no-network’ or adding ‘--network’ on the command line."
@@ -3005,12 +3180,12 @@ msgstr ""
 msgid "the list of output formats cannot be empty"
 msgstr ""
 
-#: builder/repository_main.ml:454
+#: builder/repository_main.ml:460
 msgid ""
 "the repository must contain an index file when running in automated mode"
 msgstr ""
 
-#: resize/resize.ml:477
+#: resize/resize.ml:484
 msgid "the source disk has no partitions"
 msgstr ""
 
@@ -3046,7 +3221,15 @@ msgstr ""
 msgid "the value of the key ‘%s’ is not an object"
 msgstr ""
 
-#: builder/sigchecker.ml:174
+#: common/mlcustomize/inject_virtio_win.ml:168
+msgid ""
+"there are no virtio drivers available for this version of Windows (%d.%d %s "
+"%s %s).  virt-v2v looks for drivers in %s\n"
+"\n"
+"The guest will be configured to use slower emulated devices."
+msgstr ""
+
+#: builder/sigchecker.ml:179
 msgid ""
 "there is no detached signature file\n"
 "This probably means the index file is missing a sig=... line.\n"
@@ -3054,19 +3237,39 @@ msgid ""
 "are susceptible to man-in-the-middle attacks."
 msgstr ""
 
-#: customize/customize_run.ml:360
+#: common/mlcustomize/inject_virtio_win.ml:191
+msgid ""
+"there is no virtio block device driver for this version of Windows (%d.%d "
+"%s).  virt-v2v looks for this driver in %s\n"
+"\n"
+"The guest will be configured to use a slower emulated device."
+msgstr ""
+
+#: common/mlcustomize/inject_virtio_win.ml:216
+msgid ""
+"there is no virtio network driver for this version of Windows (%d.%d %s).  "
+"virt-v2v looks for this driver in %s\n"
+"\n"
+"The guest will be configured to use a slower emulated device."
+msgstr ""
+
+#: customize/timezone.ml:35
+msgid "timezone '%s' does not exist, use a location like 'Europe/London'"
+msgstr ""
+
+#: customize/customize_run.ml:326
 msgid "timezone could not be set for this type of guest"
 msgstr ""
 
-#: builder/cmdline.ml:250
+#: builder/cmdline.ml:252
 msgid "too many parameters, at most one ‘os-version’ is allowed for --list"
 msgstr ""
 
-#: builder/cmdline.ml:241
+#: builder/cmdline.ml:243
 msgid "too many parameters, expecting ‘os-version’"
 msgstr ""
 
-#: builder/repository_main.ml:100
+#: builder/repository_main.ml:101
 msgid "too many parameters, only one path to repository is allowed"
 msgstr ""
 
@@ -3084,43 +3287,43 @@ msgstr ""
 msgid "unhandled checksum type ‘%s’"
 msgstr ""
 
-#: resize/resize.ml:264
+#: resize/resize.ml:268
 msgid "unknown --align-first option: use never|always|auto"
 msgstr ""
 
-#: resize/resize.ml:272
+#: resize/resize.ml:276
 msgid "unknown --unknown-filesystems: use ignore|warn|error"
 msgstr ""
 
-#. resize/resize.ml:878
-#: resize/resize.ml:966 resize/resize.ml:935 resize/resize.ml:896
+#. resize/resize.ml:919
+#: resize/resize.ml:1014 resize/resize.ml:980 resize/resize.ml:938
 msgid "unknown/unavailable method for expanding the %s filesystem on %s"
 msgstr ""
 
-#: sysprep/utils.ml:64
+#: sysprep/utils.ml:65
 msgid "updating the system CA store on this guest %s/%s is not supported"
 msgstr ""
 
-#: sysprep/main.ml:124 get-kernel/get_kernel.ml:58
-#: customize/customize_main.ml:79
+#. customize/customize_main.ml:83
+#: sysprep/main.ml:127 get-kernel/get_kernel.ml:59 drivers/drivers.ml:52
 msgid "uri"
 msgstr ""
 
-#: resize/resize.ml:308
+#: resize/resize.ml:312
 msgid "usage is: %s [--options] indisk outdisk"
 msgstr ""
 
-#: sparsify/cmdline.ml:134
+#: sparsify/cmdline.ml:135
 msgid "usage: %s [--options] indisk outdisk"
 msgstr ""
 
-#: sysprep/sysprep_operation_user_account.ml:145
+#: sysprep/sysprep_operation_user_account.ml:149
 msgid ""
 "user-accounts: --keep-user-accounts parameter was used, but the \"user-"
 "account\" operation is not enabled"
 msgstr ""
 
-#: sysprep/sysprep_operation_user_account.ml:147
+#: sysprep/sysprep_operation_user_account.ml:152
 msgid ""
 "user-accounts: --remove-user-accounts parameter was used, but the \"user-"
 "account\" operation is not enabled"
@@ -3130,8 +3333,8 @@ msgstr ""
 msgid "user-accounts: empty user name"
 msgstr ""
 
-#. sysprep/sysprep_operation_user_account.ml:112
-#: sysprep/sysprep_operation_user_account.ml:127
+#. sysprep/sysprep_operation_user_account.ml:113
+#: sysprep/sysprep_operation_user_account.ml:130
 msgid "users"
 msgstr ""
 
@@ -3147,38 +3350,38 @@ msgid ""
 "%s"
 msgstr ""
 
-#: builder/cmdline.ml:272
+#: builder/cmdline.ml:277
 msgid ""
 "virt-builder --get-kernel image\n"
 "Missing ‘image’ (disk image file) argument"
 msgstr ""
 
-#: builder/cmdline.ml:256
+#: builder/cmdline.ml:259
 msgid ""
 "virt-builder --notes os-version\n"
 "Missing ‘os-version’. Use ‘--list’ to list available template names."
 msgstr ""
 
-#: builder/cmdline.ml:239
+#: builder/cmdline.ml:240
 msgid ""
 "virt-builder os-version\n"
 "Missing ‘os-version’. Use ‘--list’ to list available template names."
 msgstr ""
 
-#: builder/repository_main.ml:240
+#: builder/repository_main.ml:244
 msgid ""
 "virt-builder template images must have one and only one root file system, "
 "found %d"
 msgstr ""
 
-#: builder/repository_main.ml:96
+#: builder/repository_main.ml:97
 msgid ""
 "virt-builder-repository /path/to/repo\n"
 "\n"
 "Use ‘/path/to/repo’ to point to the repository folder."
 msgstr ""
 
-#: builder/builder.ml:166
+#: builder/builder.ml:173
 msgid "virt-resize is not installed (or does not work)"
 msgstr ""
 
@@ -3186,79 +3389,91 @@ msgstr ""
 msgid "xfs_growfs"
 msgstr ""
 
-#: get-kernel/get_kernel.ml:95
+#: drivers/drivers.ml:77
+msgid ""
+"you cannot give -a and -d options together.  Read virt-drivers(1) man page "
+"for further information."
+msgstr ""
+
+#: get-kernel/get_kernel.ml:97
 msgid ""
 "you cannot give -a and -d options together.  Read virt-get-kernel(1) man "
 "page for further information."
 msgstr ""
 
-#: sysprep/main.ml:176
+#: sysprep/main.ml:178
 msgid ""
 "you cannot give -a and -d options together.  Read virt-sysprep(1) man page "
 "for further information."
 msgstr ""
 
-#: customize/customize_main.ml:132
+#: customize/customize_main.ml:137
 msgid ""
 "you cannot give -a and -d options together. Read virt-customize(1) man page "
 "for further information."
 msgstr ""
 
-#: sysprep/main.ml:78
+#: sysprep/main.ml:80
 msgid "you cannot pass an empty argument to --enable"
 msgstr ""
 
-#: sparsify/cmdline.ml:162
+#: sparsify/cmdline.ml:164
 msgid "you cannot use --in-place and --check-tmpdir options together"
 msgstr ""
 
-#: sparsify/cmdline.ml:165
+#: sparsify/cmdline.ml:168
 msgid "you cannot use --in-place and --compress options together"
 msgstr ""
 
-#: sparsify/cmdline.ml:168
+#: sparsify/cmdline.ml:171
 msgid "you cannot use --in-place and --convert options together"
 msgstr ""
 
-#: sparsify/cmdline.ml:174
+#: sparsify/cmdline.ml:177
 msgid "you cannot use --in-place and --tmp options together"
 msgstr ""
 
-#: sparsify/cmdline.ml:171
+#: sparsify/cmdline.ml:174
 msgid "you cannot use --in-place and -o options together"
 msgstr ""
 
-#: resize/resize.ml:797
+#: resize/resize.ml:830
 msgid "you cannot use options --expand and --shrink together"
 msgstr ""
 
-#: sparsify/cmdline.ml:140 resize/resize.ml:314
+#: sparsify/cmdline.ml:141 resize/resize.ml:318
 msgid "you cannot use the same disk image for input and output"
 msgstr ""
 
-#: get-kernel/get_kernel.ml:93
+#: drivers/drivers.ml:74
+msgid ""
+"you must give either -a or -d options.  Read virt-drivers(1) man page for "
+"further information."
+msgstr ""
+
+#: get-kernel/get_kernel.ml:94
 msgid ""
 "you must give either -a or -d options.  Read virt-get-kernel(1) man page for "
 "further information."
 msgstr ""
 
-#: sysprep/main.ml:165
+#: sysprep/main.ml:166
 msgid ""
 "you must give either -a or -d options.  Read virt-sysprep(1) man page for "
 "further information."
 msgstr ""
 
-#: customize/customize_main.ml:121
+#: customize/customize_main.ml:125
 msgid ""
 "you must give either -a or -d options. Read virt-customize(1) man page for "
 "further information."
 msgstr ""
 
-#: builder/repository_main.ml:228
+#: builder/repository_main.ml:231
 msgid "‘%s’ is not a recognized osinfo OS id; using it anyway"
 msgstr ""
 
-#: builder/repository_main.ml:157
+#: builder/repository_main.ml:159
 msgid "‘xz’ command failed"
 msgstr ""
 
@@ -3296,7 +3511,7 @@ msgstr ""
 
 #: align/scan.c:167 builder/index-validate.c:90 cat/cat.c:157
 #: cat/filesystems.c:252 cat/log.c:160 cat/ls.c:255 cat/tail.c:166
-#: df/main.c:169 diff/diff.c:288 edit/edit.c:169 format/format.c:192
+#: df/main.c:169 diff/diff.c:289 edit/edit.c:169 format/format.c:192
 #: inspector/inspector.c:187 make-fs/make-fs.c:157
 #, c-format
 msgid "unknown long option: %s (%d)"
@@ -3396,7 +3611,7 @@ msgid ""
 msgstr ""
 
 #: cat/cat.c:245 cat/filesystems.c:349 cat/log.c:217 cat/ls.c:369
-#: cat/tail.c:231 diff/diff.c:342 edit/edit.c:269 inspector/inspector.c:287
+#: cat/tail.c:231 diff/diff.c:343 edit/edit.c:269 inspector/inspector.c:287
 #, c-format
 msgid "%s: error: you must specify at least one -a or -d option.\n"
 msgstr ""
@@ -3449,7 +3664,7 @@ msgid ""
 "Make sure to specify the argument for --format like '--format=%s'.\n"
 msgstr ""
 
-#: cat/filesystems.c:320 cat/ls.c:361 df/main.c:266 diff/diff.c:356
+#: cat/filesystems.c:320 cat/ls.c:361 df/main.c:266 diff/diff.c:357
 #, c-format
 msgid "you cannot use -h and --csv options together."
 msgstr ""
@@ -3463,7 +3678,7 @@ msgstr ""
 #, c-format
 msgid ""
 "%s: display log files in a virtual machine\n"
-"Copyright (C) 2010-2020 Red Hat Inc.\n"
+"Copyright (C) 2010-2023 Red Hat Inc.\n"
 "Usage:\n"
 "  %s [--options] -d domname\n"
 "  %s [--options] -a disk.img [-a disk.img ...]\n"
@@ -3484,17 +3699,17 @@ msgid ""
 "For more information, see the manpage %s(1).\n"
 msgstr ""
 
-#: cat/log.c:270
+#: cat/log.c:273
 #, c-format
 msgid "%s: Windows Event Log for pre-Vista guests is not supported.\n"
 msgstr ""
 
-#: cat/log.c:378
+#: cat/log.c:381
 #, c-format
 msgid "%s: could not format journal entry timestamp\n"
 msgstr ""
 
-#: cat/log.c:444
+#: cat/log.c:447
 #, c-format
 msgid ""
 "%s: you need to install ‘evtxdump.py’ (from the python-evtx package)\n"
@@ -3503,7 +3718,7 @@ msgid ""
 "from this guest, and examine in a binary file viewer.\n"
 msgstr ""
 
-#: cat/log.c:463
+#: cat/log.c:466
 #, c-format
 msgid "%s: Windows Event Log file (%s) not found\n"
 msgstr ""
@@ -3512,7 +3727,7 @@ msgstr ""
 #, c-format
 msgid ""
 "%s: list files in a virtual machine\n"
-"Copyright (C) 2010-2012 Red Hat Inc.\n"
+"Copyright (C) 2010-2023 Red Hat Inc.\n"
 "Usage:\n"
 "  %s [--options] -d domname dir [dir ...]\n"
 "  %s [--options] -a disk.img [-a disk.img ...] dir [dir ...]\n"
@@ -3588,12 +3803,12 @@ msgid ""
 "Please specify at least one file to follow.\n"
 msgstr ""
 
-#: cat/tail.c:424
+#: cat/tail.c:427
 #, c-format
 msgid "%s: error: none of the files were found in the disk image\n"
 msgstr ""
 
-#: cat/tail.c:429
+#: cat/tail.c:432
 #, c-format
 msgid "%s: all files deleted, exiting\n"
 msgstr ""
@@ -3633,12 +3848,19 @@ msgstr ""
 msgid "%s: line %d: error parsing configuration file: %s"
 msgstr ""
 
-#: common/options/decrypt.c:48
+#: common/options/decrypt.c:52
 #, c-format
 msgid "string size overflow"
 msgstr ""
 
-#: common/options/decrypt.c:169
+#: common/options/decrypt.c:170
+#, c-format
+msgid ""
+"'clevis_luks_unlock', needed for decrypting %s, is unavailable in this "
+"libguestfs version"
+msgstr ""
+
+#: common/options/decrypt.c:184
 #, c-format
 msgid ""
 "could not find key to open LUKS encrypted %s.\n"
@@ -3706,7 +3928,12 @@ msgstr ""
 msgid "Enter key or passphrase (\"%s\"): "
 msgstr ""
 
-#: common/options/keys.c:173
+#: common/options/keys.c:144
+#, c-format
+msgid "size_t overflow"
+msgstr ""
+
+#: common/options/keys.c:187
 #, c-format
 msgid "could not read key from user"
 msgstr ""
@@ -3745,7 +3972,7 @@ msgstr ""
 
 #: common/options/uri.c:138
 #, c-format
-msgid "%s: %s: cannot both a server name and a socket query parameter\n"
+msgid "%s: %s: cannot have both a server name and a socket query parameter\n"
 msgstr ""
 
 #: common/parallel/domains.c:106
@@ -3808,12 +4035,12 @@ msgstr ""
 msgid "%s: error: cannot parse xattr count for %s %s\n"
 msgstr ""
 
-#: common/windows/windows.c:142
+#: common/windows/windows.c:139
 #, c-format
 msgid "to use Windows drive letters, this must be a Windows guest"
 msgstr ""
 
-#: common/windows/windows.c:153
+#: common/windows/windows.c:150
 #, c-format
 msgid "drive '%c:' not found."
 msgstr ""
@@ -3899,7 +4126,7 @@ msgstr ""
 #, c-format
 msgid ""
 "%s: list differences between virtual machines\n"
-"Copyright (C) 2010-2020 Red Hat Inc.\n"
+"Copyright (C) 2010-2023 Red Hat Inc.\n"
 "Usage:\n"
 "  %s [--options] -d domain1 -D domain2\n"
 "  %s [--options] -a disk1.img -A disk2.img [-a|-A ...]\n"
@@ -3936,12 +4163,12 @@ msgid ""
 "For more information, see the manpage %s(1).\n"
 msgstr ""
 
-#: diff/diff.c:347
+#: diff/diff.c:348
 #, c-format
 msgid "%s: error: you must specify at least one -A or -D option.\n"
 msgstr ""
 
-#: diff/diff.c:359
+#: diff/diff.c:360
 #, c-format
 msgid ""
 "%s: error: extra argument ‘%s’ on command line.\n"
@@ -3949,12 +4176,12 @@ msgid ""
 "format=%s'.\n"
 msgstr ""
 
-#: diff/diff.c:767
+#: diff/diff.c:775
 #, c-format
 msgid "%s: external diff command failed\n"
 msgstr ""
 
-#: diff/diff.c:771
+#: diff/diff.c:779
 msgid "End of diff"
 msgstr ""
 
@@ -3962,7 +4189,7 @@ msgstr ""
 #, c-format
 msgid ""
 "%s: Edit a file in a virtual machine\n"
-"Copyright (C) 2009-2020 Red Hat Inc.\n"
+"Copyright (C) 2009-2023 Red Hat Inc.\n"
 "Usage:\n"
 "  %s [--options] -d domname file [file ...]\n"
 "  %s [--options] -a disk.img [-a disk.img ...] file [file ...]\n"
@@ -4108,7 +4335,7 @@ msgstr ""
 msgid "cannot use --xpath together with other options."
 msgstr ""
 
-#: inspector/inspector.c:315
+#: inspector/inspector.c:318
 #, c-format
 msgid ""
 "no operating system could be detected inside this disk image.\n"
@@ -4125,47 +4352,47 @@ msgid ""
 "information about the disk image as possible.\n"
 msgstr ""
 
-#: inspector/inspector.c:331
+#: inspector/inspector.c:334
 #, c-format
 msgid "xmlOutputBufferCreateFd: failed to open stdout"
 msgstr ""
 
-#: inspector/inspector.c:337
+#: inspector/inspector.c:340
 #, c-format
 msgid "xmlNewTextWriter: failed to create libxml2 writer"
 msgstr ""
 
-#: inspector/inspector.c:709
+#: inspector/inspector.c:720
 #, c-format
 msgid "unable to parse XML from stdin"
 msgstr ""
 
-#: inspector/inspector.c:713
+#: inspector/inspector.c:724
 #, c-format
 msgid "unable to create new XPath context"
 msgstr ""
 
-#: inspector/inspector.c:717
+#: inspector/inspector.c:728
 #, c-format
 msgid "unable to evaluate XPath expression"
 msgstr ""
 
-#: inspector/inspector.c:728
+#: inspector/inspector.c:739
 #, c-format
 msgid "xmlSaveToFd failed"
 msgstr ""
 
-#: inspector/inspector.c:733
+#: inspector/inspector.c:744
 #, c-format
 msgid "xmlNewDoc failed"
 msgstr ""
 
-#: inspector/inspector.c:736
+#: inspector/inspector.c:747
 #, c-format
 msgid "xmlCopyNode failed"
 msgstr ""
 
-#: inspector/inspector.c:741
+#: inspector/inspector.c:752
 #, c-format
 msgid "xmlSaveDoc failed"
 msgstr ""
@@ -4174,7 +4401,7 @@ msgstr ""
 #, c-format
 msgid ""
 "%s: make a filesystem from a tar archive or files\n"
-"Copyright (C) 2010-2020 Red Hat Inc.\n"
+"Copyright (C) 2010-2023 Red Hat Inc.\n"
 "Usage:\n"
 "  %s [--options] input.tar output.img\n"
 "  %s [--options] input.tar.gz output.img\n"
index 2af3d8463dfe72ea2c52f9c84d2ba9d8a28dc251..78d67627d67b9335d9251bd248bc69ffbad385c8 100755 (executable)
@@ -1,6 +1,6 @@
 #!/usr/bin/env perl
 # podwrapper.pl
-# Copyright (C) 2010-2020 Red Hat Inc.
+# Copyright (C) 2010-2023 Red Hat Inc.
 # @configure_input@
 #
 # This program is free software; you can redistribute it and/or modify
@@ -737,4 +737,4 @@ Richard W.M. Jones.
 
 =head1 COPYRIGHT
 
-Copyright (C) 2012-2020 Red Hat Inc.
+Copyright (C) 2012-2023 Red Hat Inc.
index f8aa4c46bfcf555e2c562f39b949683386ce6851..e34ee3459c0a3d3acc4c5d7cd18fc8969ad56af1 100644 (file)
@@ -1,5 +1,5 @@
 # libguestfs virt-resize 2.0 tools
-# Copyright (C) 2011-2020 Red Hat Inc.
+# Copyright (C) 2011-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index 60f9c76b7458f64b9c076ffd62f26afdb01175f6..72890981379ea8e8af0517d10b751d5c4f8add43 100644 (file)
@@ -15,7 +15,7 @@
 @SET_MAKE@
 
 # libguestfs virt-resize 2.0 tools
-# Copyright (C) 2011-2020 Red Hat Inc.
+# Copyright (C) 2011-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -32,7 +32,7 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -482,7 +482,6 @@ EGREP = @EGREP@
 ETAGS = @ETAGS@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FILECMD = @FILECMD@
 GCC_VISIBILITY_HIDDEN = @GCC_VISIBILITY_HIDDEN@
 GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
 GMSGFMT = @GMSGFMT@
@@ -511,6 +510,8 @@ LIBINTL = @LIBINTL@
 LIBLZMA_CFLAGS = @LIBLZMA_CFLAGS@
 LIBLZMA_LIBS = @LIBLZMA_LIBS@
 LIBOBJS = @LIBOBJS@
+LIBOSINFO_CFLAGS = @LIBOSINFO_CFLAGS@
+LIBOSINFO_LIBS = @LIBOSINFO_LIBS@
 LIBS = @LIBS@
 LIBTINFO_CFLAGS = @LIBTINFO_CFLAGS@
 LIBTINFO_LIBS = @LIBTINFO_LIBS@
@@ -581,6 +582,7 @@ PO4A_TRANSLATE = @PO4A_TRANSLATE@
 PODWRAPPER = @PODWRAPPER@
 POSUB = @POSUB@
 RANLIB = @RANLIB@
+REALPATH = @REALPATH@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
index b77e680d49c8b9c19baaff16600b38139e70f651..ee2fb2d920dda95d5ae61b435e9242fa1f34c03f 100644 (file)
@@ -1,5 +1,5 @@
 (* virt-resize
- * Copyright (C) 2010-2020 Red Hat Inc.
+ * Copyright (C) 2010-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -170,7 +170,8 @@ let main () =
     let expand = ref "" in
     let set_expand s =
       if s = "" then error (f_"empty --expand option")
-      else if !expand <> "" then error (f_"--expand option given more than once")
+      else if !expand <> "" then
+        error (f_"--expand option given more than once")
       else expand := s
     in
     let expand_content = ref true in
@@ -185,7 +186,8 @@ let main () =
     let shrink = ref "" in
     let set_shrink s =
       if s = "" then error (f_"empty --shrink option")
-      else if !shrink <> "" then error (f_"--shrink option given more than once")
+      else if !shrink <> "" then
+        error (f_"--shrink option given more than once")
       else shrink := s
     in
     let sparse = ref true in
@@ -223,7 +225,8 @@ A short summary of the options is given below.  For detailed help please
 read the man page virt-resize(1).
 ")
         prog in
-    let opthandle = create_standard_options argspec ~anon_fun ~machine_readable:true usage_msg in
+    let opthandle = create_standard_options argspec ~anon_fun
+                      ~machine_readable:true usage_msg in
     Getopt.parse opthandle.getopt;
 
     if verbose () then (
@@ -244,7 +247,8 @@ read the man page virt-resize(1).
     let ignores = List.rev !ignores in
     let lv_expands = List.rev !lv_expands in
     let ntfsresize_force = !ntfsresize_force in
-    let output_format = match !output_format with "" -> None | str -> Some str in
+    let output_format =
+      match !output_format with "" -> None | str -> Some str in
     let resizes = List.rev !resizes in
     let resizes_force = List.rev !resizes_force in
     let shrink = match !shrink with "" -> None | str -> Some str in
@@ -317,14 +321,16 @@ read the man page virt-resize(1).
     let infile =
       try (infile, URI.parse_uri infile)
       with URI.Parse_failed ->
-        error (f_"error parsing URI ‘%s’. Look for error messages printed above.")
+        error (f_"error parsing URI ‘%s’. \
+                  Look for error messages printed above.")
           infile in
 
     (* outfile can be a URI. *)
     let outfile =
       try (outfile, URI.parse_uri outfile)
       with URI.Parse_failed ->
-        error (f_"error parsing URI ‘%s’. Look for error messages printed above.")
+        error (f_"error parsing URI ‘%s’. \
+                  Look for error messages printed above.")
           outfile in
 
     infile, outfile, align_first, alignment, copy_boot_loader,
@@ -333,7 +339,7 @@ read the man page virt-resize(1).
     lv_expands, ntfsresize_force, output_format,
     resizes, resizes_force, shrink, sparse, unknown_fs_mode in
 
-  (* Default to true, since NTFS/btrfs/XFS/f2fs support are usually available. *)
+  (* Default to true, since NTFS/btrfs/XFS/f2fs support are usually available.*)
   let ntfs_available = ref true in
   let btrfs_available = ref true in
   let xfs_available = ref true in
@@ -424,7 +430,8 @@ read the man page virt-resize(1).
     | "msdos" -> MBR, "msdos"
     | "gpt" -> GPT, "gpt"
     | _ ->
-      error (f_"%s: unknown partition table type\nvirt-resize only supports MBR (DOS) and GPT partition tables.")
+      error (f_"%s: unknown partition table type\n\
+                virt-resize only supports MBR (DOS) and GPT partition tables.")
         (fst infile) in
 
   let disk_guid =
@@ -635,15 +642,20 @@ read the man page virt-resize(1).
       let partition =
         try Hashtbl.find hash name
         with Not_found ->
-          error (f_"%s: partition not found in the source disk image (this error came from ‘%s’ option on the command line).  Try running this command: virt-filesystems --partitions --long -a %s")
+          error (f_"%s: partition not found in the source disk image \
+                    (this error came from ‘%s’ option on the command line).  \
+                    Try running this command: \
+                    virt-filesystems --partitions --long -a %s")
           name option (fst infile) in
 
       if partition.p_operation = OpIgnore then
-        error (f_"%s: partition already ignored, you cannot use it in ‘%s’ option")
+        error (f_"%s: partition already ignored, \
+                  you cannot use it in ‘%s’ option")
           name option;
 
       if partition.p_operation = OpDelete then
-        error (f_"%s: partition already deleted, you cannot use it in ‘%s’ option")
+        error (f_"%s: partition already deleted, \
+                  you cannot use it in ‘%s’ option")
           name option;
 
       partition in
@@ -692,18 +704,38 @@ read the man page virt-resize(1).
          *)
         match p.p_type with
         | ContentUnknown ->
-          error (f_"%s: This partition has unknown content which might be damaged by shrinking it.  If you want to shrink this partition, you need to use the ‘--resize-force’ option, but that could destroy any data on this partition.  (This error came from ‘%s’ option on the command line.)")
+          error (f_"%s: This partition has unknown content which might be \
+                    damaged by shrinking it.  If you want to shrink this \
+                    partition, you need to use the ‘--resize-force’ option, \
+                    but that could destroy any data on this partition.  \
+                    (This error came from ‘%s’ option on the command line.)")
             name option
         | ContentPV size when size > newsize ->
-          error (f_"%s: This partition contains an LVM physical volume which will be damaged by shrinking it below %Ld bytes (user asked to shrink it to %Ld bytes).  If you want to shrink this partition, you need to use the ‘--resize-force’ option, but that could destroy any data on this partition.  (This error came from ‘%s‘ option on the command line.)")
+          error (f_"%s: This partition contains an LVM physical volume which \
+                    will be damaged by shrinking it below %Ld bytes (user \
+                    asked to shrink it to %Ld bytes).  If you want to shrink \
+                    this partition, you need to use the ‘--resize-force’ \
+                    option, but that could destroy any data on this \
+                    partition.  (This error came from ‘%s‘ option on the \
+                    command line.)")
             name size newsize option
         | ContentPV _ -> ()
         | ContentFS (fstype, size) when size > newsize ->
-          error (f_"%s: This partition contains a %s filesystem which will be damaged by shrinking it below %Ld bytes (user asked to shrink it to %Ld bytes).  If you want to shrink this partition, you need to use the ‘--resize-force’ option, but that could destroy any data on this partition.  (This error came from ‘%s’ option on the command line.)")
+          error (f_"%s: This partition contains a %s filesystem which will \
+                    be damaged by shrinking it below %Ld bytes (user asked to \
+                    shrink it to %Ld bytes).  If you want to shrink this \
+                    partition, you need to use the ‘--resize-force’ option, \
+                    but that could destroy any data on this partition.  \
+                    (This error came from ‘%s’ option on the command line.)")
             name fstype size newsize option
         | ContentFS _ -> ()
         | ContentExtendedPartition ->
-          error (f_"%s: This extended partition contains logical partitions which might be damaged by shrinking it.  If you want to shrink this partition, you need to use the ‘--resize-force’ option, but that could destroy logical partitions within this partition.  (This error came from ‘%s’ option on the command line.)")
+          error (f_"%s: This extended partition contains logical partitions \
+                    which might be damaged by shrinking it.  If you want to \
+                    shrink this partition, you need to use the \
+                    ‘--resize-force’ option, but that could destroy logical \
+                    partitions within this partition.  (This error came from \
+                    ‘%s’ option on the command line.)")
             name option
         | ContentSwap -> ()
       );
@@ -764,7 +796,8 @@ read the man page virt-resize(1).
 
       (* Size of the unpartitioned space before the first partition. *)
       let start_overhead_sects =
-        maxl64 [gpt_start_sects; max_bootloader_sects; first_part_start_sects] in
+        maxl64 [gpt_start_sects; max_bootloader_sects;
+                first_part_start_sects] in
 
       (* Maximum space lost because of alignment of partitions. *)
       let alignment_sects = alignment *^ Int64.of_int (nr_partitions + 1) in
@@ -805,7 +838,9 @@ read the man page virt-resize(1).
      | None -> ()
      | Some dev ->
          if surplus < 0L then
-           error (f_"You cannot use --expand when there is no surplus space to expand into.  You need to make the target disk larger by at least %s.")
+           error (f_"You cannot use --expand when there is no surplus \
+                     space to expand into.  You need to make the target \
+                     disk larger by at least %s.")
              (human_size (Int64.neg surplus));
 
          let option = "--expand" in
@@ -817,7 +852,8 @@ read the man page virt-resize(1).
      | None -> ()
      | Some dev ->
          if surplus > 0L then
-           error (f_"You cannot use --shrink when there is no deficit (see ‘deficit’ in the virt-resize(1) man page).");
+           error (f_"You cannot use --shrink when there is no deficit \
+                     (see ‘deficit’ in the virt-resize(1) man page).");
 
          let option = "--shrink" in
          let p = find_partition ~option dev in
@@ -834,7 +870,9 @@ read the man page virt-resize(1).
 
     if surplus < 0L then (
       let deficit = Int64.neg surplus in
-      error (f_"There is a deficit of %Ld bytes (%s).  You need to make the target disk larger by at least this amount or adjust your resizing requests.")
+      error (f_"There is a deficit of %Ld bytes (%s).  You need to make the \
+                target disk larger by at least this amount or adjust your \
+                resizing requests.")
       deficit (human_size deficit)
     );
 
@@ -849,7 +887,10 @@ read the man page virt-resize(1).
       let lv =
         try Hashtbl.find hash name
         with Not_found ->
-          error (f_"%s: logical volume not found in the source disk image (this error came from ‘--lv-expand’ option on the command line).  Try running this command: virt-filesystems --logical-volumes --long -a %s")
+          error (f_"%s: logical volume not found in the source disk image \
+                    (this error came from ‘--lv-expand’ option on the \
+                    command line).  Try running this command: \
+                    virt-filesystems --logical-volumes --long -a %s")
             name (fst infile) in
       lv.lv_operation <- LVOpExpand
   ) lv_expands;
@@ -875,7 +916,8 @@ read the man page virt-resize(1).
             | ContentExtendedPartition
             | ContentSwap -> ()
             | ContentFS (fs, _) ->
-              error (f_"unknown/unavailable method for expanding the %s filesystem on %s")
+              error (f_"unknown/unavailable method for expanding the %s \
+                        filesystem on %s")
                 fs p.p_name
             );
           )
@@ -893,7 +935,8 @@ read the man page virt-resize(1).
             | ContentExtendedPartition
             | ContentSwap -> ()
             | ContentFS (fs, _) ->
-              error (f_"unknown/unavailable method for expanding the %s filesystem on %s")
+              error (f_"unknown/unavailable method for expanding the %s \
+                        filesystem on %s")
                 fs lv.lv_name;
             );
           )
@@ -913,14 +956,16 @@ read the man page virt-resize(1).
         | OpCopy ->
           sprintf (f_"%s: This partition will be left alone.") p.p_name
         | OpIgnore ->
-          sprintf (f_"%s: This partition will be created, but the contents will be ignored (ie. not copied to the target).") p.p_name
+          sprintf (f_"%s: This partition will be created, but the contents \
+                      will be ignored (ie. not copied to the target).") p.p_name
         | OpDelete ->
           sprintf (f_"%s: This partition will be deleted.") p.p_name
         | OpResize newsize ->
           sprintf (f_"%s: This partition will be resized from %s to %s.")
             p.p_name (human_size p.p_part.G.part_size) (human_size newsize) ^
             if can_expand_content p.p_type then (
-              sprintf (f_"  The %s on %s will be expanded using the ‘%s’ method.")
+              sprintf (f_"  The %s on %s will be expanded using the ‘%s’ \
+                          method.")
                 (string_of_partition_content_no_size p.p_type)
                 p.p_name
                 (string_of_expand_content_method
@@ -932,7 +977,8 @@ read the man page virt-resize(1).
               | ContentExtendedPartition
               | ContentSwap -> ()
               | ContentFS (fs, _) ->
-                warning (f_"unknown/unavailable method for expanding the %s filesystem on %s")
+                warning (f_"unknown/unavailable method for expanding the \
+                            %s filesystem on %s")
                   fs p.p_name;
               );
               ""
@@ -948,10 +994,12 @@ read the man page virt-resize(1).
         | LVOpNone -> ()
         | LVOpExpand ->
             let text =
-              sprintf (f_"%s: This logical volume will be expanded to maximum size.")
+              sprintf (f_"%s: This logical volume will be expanded to \
+                          maximum size.")
                 name ^
               if can_expand_content lv.lv_type then (
-                sprintf (f_"  The %s on %s will be expanded using the ‘%s’ method.")
+                sprintf (f_"  The %s on %s will be expanded using the \
+                            ‘%s’ method.")
                   (string_of_partition_content_no_size lv.lv_type)
                   name
                   (string_of_expand_content_method
@@ -963,7 +1011,8 @@ read the man page virt-resize(1).
                 | ContentExtendedPartition
                 | ContentSwap -> ()
                 | ContentFS (fs, _) ->
-                  warning (f_"unknown/unavailable method for expanding the %s filesystem on %s")
+                  warning (f_"unknown/unavailable method for expanding \
+                              the %s filesystem on %s")
                     fs name;
                 );
                 ""
@@ -979,9 +1028,11 @@ read the man page virt-resize(1).
           if surplus >= min_extra_partition then
             s_"  An extra partition will be created for the surplus."
           else
-            s_"  The surplus space is not large enough for an extra partition to be created and so it will just be ignored."
+            s_"  The surplus space is not large enough for an extra partition \
+               to be created and so it will just be ignored."
         ) else
-          s_"  The surplus space will be ignored.  Run a partitioning program in the guest to partition this extra space if you want." in
+          s_"  The surplus space will be ignored.  Run a partitioning program \
+             in the guest to partition this extra space if you want." in
 
       info "%s" (text ^ "\n")
     );
@@ -1038,7 +1089,10 @@ read the man page virt-resize(1).
 
     let g, ok = initialize_partition_table g 5 in
     if not ok then
-      error (f_"Failed to initialize the partition table on the target disk.  You need to wipe or recreate the target disk and then run virt-resize again.\n\nThe underlying error was: %s") !last_error;
+      error (f_"Failed to initialize the partition table on the target disk.  \
+                You need to wipe or recreate the target disk and then run \
+                virt-resize again.\n\nThe underlying error was: %s")
+        !last_error;
 
     g in
 
@@ -1214,7 +1268,8 @@ read the man page virt-resize(1).
 
       Option.may (g#part_set_name "/dev/sdb" p.p_target_partnum) p.p_label;
       Option.may (g#part_set_gpt_guid "/dev/sdb" p.p_target_partnum) p.p_guid;
-      Option.may (g#part_set_gpt_attributes "/dev/sdb" p.p_target_partnum) p.p_attributes;
+      Option.may (g#part_set_gpt_attributes "/dev/sdb" p.p_target_partnum)
+        p.p_attributes;
 
       match parttype, p.p_id with
       | GPT, GPT_Type gpt_type ->
@@ -1287,7 +1342,8 @@ read the man page virt-resize(1).
       (* Sanity check: it contains the NTFS magic. *)
       let magic = g#pread_device target 8 3L in
       if magic <> "NTFS    " then
-        warning (f_"first partition is NTFS but does not contain NTFS boot loader magic")
+        warning (f_"first partition is NTFS but does not contain \
+                    NTFS boot loader magic")
       else (
         message (f_"Fixing first NTFS partition boot record");
 
@@ -1441,8 +1497,8 @@ read the man page virt-resize(1).
   if not (quiet ()) then (
     print_newline ();
     info "%s" (s_"Resize operation completed with no errors.  Before deleting \
-               the old disk, carefully check that the resized disk boots and \
-               works correctly.");
+                  the old disk, carefully check that the resized disk boots \
+                  and works correctly.");
   )
 
 let () = run_main_and_handle_errors main
index 928687ec738b6bbf5799bdcd4ff719c26088b6be..a51f7c6543f9b66c0edb9ebdce1c2c9802fb53ad 100644 (file)
@@ -1,5 +1,5 @@
 (* virt-resize
- * Copyright (C) 2010-2020 Red Hat Inc.
+ * Copyright (C) 2010-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index 6726c5e9f7f698df2da1c37b243b86d144ac9b95..5eb623e0acc4047cdc3fc349b838e4056deb4305 100755 (executable)
@@ -1,5 +1,5 @@
 #!/usr/bin/env perl
-# Copyright (C) 2010-2020 Red Hat Inc.
+# Copyright (C) 2010-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index a46da526a1b89c572782802d8930c2aae889d8c3..3a1f140ebf412212def033127f6ad53044976851 100644 (file)
@@ -876,4 +876,4 @@ Richard W.M. Jones L<http://people.redhat.com/~rjones/>
 
 =head1 COPYRIGHT
 
-Copyright (C) 2010-2012 Red Hat Inc.
+Copyright (C) 2010-2023 Red Hat Inc.
diff --git a/run.in b/run.in
index a19d262de4d9d1d5731f88808c55cc1639923cd3..f5c643822ece2a67425a7b44149f98aed023e83e 100755 (executable)
--- a/run.in
+++ b/run.in
@@ -1,6 +1,6 @@
 #!/bin/bash -
 # libguestfs 'run' programs locally script
-# Copyright (C) 2011-2021 Red Hat Inc.
+# Copyright (C) 2011-2023 Red Hat Inc.
 #
 # @configure_input@
 #
@@ -76,6 +76,7 @@ prepend PATH "$b/customize"
 prepend PATH "$b/df"
 prepend PATH "$b/dib"
 prepend PATH "$b/diff"
+prepend PATH "$b/drivers"
 prepend PATH "$b/edit"
 prepend PATH "$b/erlang"
 prepend PATH "$b/format"
index 0eca849da46bc4cff66e2df66fe655f407a94362..5fb0461f7ff355c666685d811ebe2fed6b374310 100644 (file)
@@ -1,5 +1,5 @@
 # libguestfs virt-sparsify tool
-# Copyright (C) 2011-2020 Red Hat Inc.
+# Copyright (C) 2011-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index 38d1c33c2e4bda2f728600365a64fe962a53a2dc..c0b518520042913c8850b75ffaba298dfa5f2f65 100644 (file)
@@ -15,7 +15,7 @@
 @SET_MAKE@
 
 # libguestfs virt-sparsify tool
-# Copyright (C) 2011-2020 Red Hat Inc.
+# Copyright (C) 2011-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -32,7 +32,7 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -482,7 +482,6 @@ EGREP = @EGREP@
 ETAGS = @ETAGS@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FILECMD = @FILECMD@
 GCC_VISIBILITY_HIDDEN = @GCC_VISIBILITY_HIDDEN@
 GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
 GMSGFMT = @GMSGFMT@
@@ -511,6 +510,8 @@ LIBINTL = @LIBINTL@
 LIBLZMA_CFLAGS = @LIBLZMA_CFLAGS@
 LIBLZMA_LIBS = @LIBLZMA_LIBS@
 LIBOBJS = @LIBOBJS@
+LIBOSINFO_CFLAGS = @LIBOSINFO_CFLAGS@
+LIBOSINFO_LIBS = @LIBOSINFO_LIBS@
 LIBS = @LIBS@
 LIBTINFO_CFLAGS = @LIBTINFO_CFLAGS@
 LIBTINFO_LIBS = @LIBTINFO_LIBS@
@@ -581,6 +582,7 @@ PO4A_TRANSLATE = @PO4A_TRANSLATE@
 PODWRAPPER = @PODWRAPPER@
 POSUB = @POSUB@
 RANLIB = @RANLIB@
+REALPATH = @REALPATH@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
index 421422c64d574aede6ca5636e488d1dc70f3472c..51f51e8b9bc6174bf4736c2d63c24fa7a5945474 100644 (file)
@@ -1,5 +1,5 @@
 (* virt-sparsify
- * Copyright (C) 2011-2020 Red Hat Inc.
+ * Copyright (C) 2011-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -89,7 +89,8 @@ A short summary of the options is given below.  For detailed help please
 read the man page virt-sparsify(1).
 ")
       prog in
-  let opthandle = create_standard_options argspec ~anon_fun ~key_opts:true ~machine_readable:true usage_msg in
+  let opthandle = create_standard_options argspec ~anon_fun
+                    ~key_opts:true ~machine_readable:true usage_msg in
   Getopt.parse opthandle.getopt;
 
   (* Dereference the rest of the args. *)
@@ -146,7 +147,8 @@ read the man page virt-sparsify(1).
 
       (* Check the output is not a char special (RHBZ#1056290). *)
       if is_char_device outdisk then
-        error (f_"output ‘%s’ cannot be a character device, it must be a regular file")
+        error (f_"output ‘%s’ cannot be a character device, \
+                  it must be a regular file")
               outdisk;
 
       indisk,
@@ -159,7 +161,8 @@ read the man page virt-sparsify(1).
         | _ -> error "usage: %s --in-place [--options] indisk" prog in
 
       if check_tmpdir <> `Warn then
-        error (f_"you cannot use --in-place and --check-tmpdir options together");
+        error (f_"you cannot use --in-place and --check-tmpdir \
+                  options together");
 
       if compress then
         error (f_"you cannot use --in-place and --compress options together");
index 3d35c00f720b8c12bdb8489b0c614c1e9a3a88a2..8df0ac9efb2c46771e5ce7b2d14894093361f6a4 100644 (file)
@@ -1,5 +1,5 @@
 (* virt-sparsify
- * Copyright (C) 2011-2020 Red Hat Inc.
+ * Copyright (C) 2011-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index 39d06c94c0ac1f6883b7998df595ed60899180b3..e1484709240814c897f710e908fd99c4b65f825b 100644 (file)
@@ -1,5 +1,5 @@
 (* virt-sparsify
- * Copyright (C) 2011-2020 Red Hat Inc.
+ * Copyright (C) 2011-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -65,12 +65,14 @@ let run indisk outdisk check_tmpdir compress convert
         (* Don't know, so we must autodetect. *)
         match (open_guestfs ())#disk_format indisk  with
         | "unknown" ->
-          error (f_"cannot detect input disk format; use the --format parameter")
+          error (f_"cannot detect input disk format; use the \
+                    --format parameter")
         | fmt -> fmt in
 
   (* Compression is not supported by raw output (RHBZ#852194). *)
   if output_format = "raw" && compress then
-    error (f_"--compress cannot be used for raw output.  Remove this option or use --convert qcow2.");
+    error (f_"--compress cannot be used for raw output.  \
+              Remove this option or use --convert qcow2.");
 
   (* Use TMPDIR or --tmp parameter? *)
   let tmp_place =
@@ -90,7 +92,8 @@ let run indisk outdisk check_tmpdir compress convert
           file;
       Prebuilt_file file
     | Some path ->
-      error (f_"--tmp parameter must point to a directory, block device or prebuilt file") in
+      error (f_"--tmp parameter must point to a directory, block device \
+                or prebuilt file") in
 
   (* Check there is enough space in temporary directory. *)
   (match tmp_place with
@@ -187,6 +190,7 @@ You can ignore this warning or change it to a hard failure using the
       let machine_readable = machine_readable () <> None in
       Progress.set_up_progress_bar ~machine_readable g
     );
+    g#set_network (key_store_requires_network ks);
     g#launch ();
 
     g in
@@ -341,4 +345,5 @@ You can ignore this warning or change it to a hard failure using the
   (* Finished. *)
   message (f_"Sparsify operation completed with no errors.");
   if not (quiet ()) then
-    info (f_"Before deleting the old disk, carefully check that the target disk boots and works correctly.")
+    info (f_"Before deleting the old disk, carefully check that the \
+             target disk boots and works correctly.")
index 71bf2a855cebb91caaa77a2d7695e9565c045c3e..031895e311c092bf62ab9c17edb80725c6594b92 100644 (file)
@@ -1,5 +1,5 @@
 (* virt-sparsify
- * Copyright (C) 2011-2020 Red Hat Inc.
+ * Copyright (C) 2011-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index 00f0e056478c8a8bac18264b45f1e16608b7db41..362b5b09bfa86f69e53ea6446ef40113d0cec2c3 100644 (file)
@@ -1,5 +1,5 @@
 (* virt-sparsify
- * Copyright (C) 2011-2020 Red Hat Inc.
+ * Copyright (C) 2011-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -58,6 +58,7 @@ let run disk format ignores zeroes ks =
     let machine_readable = machine_readable () <> None in
     Progress.set_up_progress_bar ~machine_readable g
   );
+  g#set_network (key_store_requires_network ks);
   g#launch ();
 
   (* If discard is not supported in the appliance, we must return exit
@@ -105,7 +106,9 @@ let run disk format ignores zeroes ks =
               with G.Error msg as exn ->
                 if g#last_errno () = G.Errno.errno_ENOTSUP then (
                   let vfs_type = try g#vfs_type fs with _ -> "unknown" in
-                  warning (f_"fstrim operation is not supported on %s (%s).  Suppress this warning using '--ignore %s', or use copying mode instead.")
+                  warning (f_"fstrim operation is not supported on %s (%s).  \
+                              Suppress this warning using '--ignore %s', \
+                              or use copying mode instead.")
                           fs vfs_type fs
                 )
                 else raise exn
@@ -130,7 +133,8 @@ let run disk format ignores zeroes ks =
                 let header = g#pread_device fs 4096 0L in
                 g#blkdiscard fs;
                 if g#pwrite_device fs header 0L <> 4096 then
-                  error (f_"pwrite: short write restoring swap partition header")
+                  error (f_"pwrite: short write restoring \
+                            swap partition header")
               )
             )
           );
index da8ce163acfc780a4b2ec31e9817383aedf84057..2218b5a3ca47e067598d02795c78097eb13b4e79 100644 (file)
@@ -1,5 +1,5 @@
 (* virt-sparsify
- * Copyright (C) 2011-2020 Red Hat Inc.
+ * Copyright (C) 2011-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index fb7c1ba3957720a247659d5e4bddb03a01a6698f..8c77fecbebea706f014e3638013c41a002dd300b 100644 (file)
@@ -1,5 +1,5 @@
 (* virt-sparsify
- * Copyright (C) 2011-2020 Red Hat Inc.
+ * Copyright (C) 2011-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index c88e32beddb65324b4c09557c9dc5980ea3727c9..7783de5f63f300bfa27b6513374c0c101ada95d7 100644 (file)
@@ -1,5 +1,5 @@
 (* virt-sparsify
- * Copyright (C) 2011-2020 Red Hat Inc.
+ * Copyright (C) 2011-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index f27b44b1e91f9313f1a992de9a0322b090eaf2c2..91e87dddbe7fec20ab7cda640d1ae730983aec63 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/bash -
 # libguestfs virt-sparsify --in-place test script
-# Copyright (C) 2011-2020 Red Hat Inc.
+# Copyright (C) 2011-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index de3672aa492e36d49916dc7372d7f163fc0daf56..483c03f2cf1810108240dbda073ce41eb3d115ba 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/bash -
 # libguestfs virt-sparsify --in-place test script
-# Copyright (C) 2011-2020 Red Hat Inc.
+# Copyright (C) 2011-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index 8d844a0c92be5da4a28ed8b0dec978bfdf557e0f..e9e422b8b2476d791f52acbdc1f4a331e94db3b8 100644 (file)
@@ -1,5 +1,5 @@
 (* virt-sparsify
- * Copyright (C) 2011-2020 Red Hat Inc.
+ * Copyright (C) 2011-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index 002a8b1b3f2fc0848291207c72d9f2481f0b8bc1..b1ea389a89019a64cdb9e9621b46c9b47821ffbe 100644 (file)
@@ -1,5 +1,5 @@
 (* virt-sparsify
- * Copyright (C) 2011-2020 Red Hat Inc.
+ * Copyright (C) 2011-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index 7e3f474f3e153488f15661e4a25faf1fa6b4726e..0fa233463a3d0422474d444248e286076527e7c6 100644 (file)
@@ -478,4 +478,4 @@ Richard W.M. Jones L<http://people.redhat.com/~rjones/>
 
 =head1 COPYRIGHT
 
-Copyright (C) 2011-2020 Red Hat Inc.
+Copyright (C) 2011-2023 Red Hat Inc.
index 867f4ae612685b014a5324fa62b389fb216c1636..6bd62b653d885baafebed08e462d4cae5929707f 100644 (file)
@@ -1,5 +1,5 @@
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index 0e3afc8a01c73452363edb8c1375e28c04ada612..4b29d4e105ba2202bdd4e931c191e0ffa258816b 100644 (file)
@@ -1,5 +1,5 @@
 # libguestfs virt-sysprep tool
-# Copyright (C) 2012-2020 Red Hat Inc.
+# Copyright (C) 2012-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -46,6 +46,7 @@ operations = \
        ipa_client \
        kerberos_data \
        kerberos_hostkeytab \
+       lvm_system_devices \
        lvm_uuids \
        logfiles \
        machine_id \
@@ -101,7 +102,8 @@ virt_sysprep_CPPFLAGS = \
        -I$(top_srcdir)/lib
 virt_sysprep_CFLAGS = \
        $(WARN_CFLAGS) $(WERROR_CFLAGS) \
-       $(LIBXML2_CFLAGS)
+       $(LIBXML2_CFLAGS) \
+       $(LIBOSINFO_CFLAGS)
 
 BOBJECTS = $(SOURCES_ML:.ml=.cmo)
 XOBJECTS = $(BOBJECTS:.cmo=.cmx)
@@ -117,6 +119,7 @@ OCAMLPACKAGES = \
        -I $(top_builddir)/common/mlutils \
        -I $(top_builddir)/common/mlgettext \
        -I $(top_builddir)/common/mlpcre \
+       -I $(top_builddir)/common/mlxml \
        -I $(top_builddir)/common/mlvisit \
        -I $(top_builddir)/common/mltools \
        -I $(top_builddir)/common/mlcustomize \
@@ -133,6 +136,7 @@ OCAMLCLIBS = \
        $(LIBTINFO_LIBS) \
        $(LIBCRYPT_LIBS) \
        $(LIBXML2_LIBS) \
+       $(LIBOSINFO_LIBS) \
        $(LIBGUESTFS_LIBS) \
        $(LIBINTL) \
        -lgnu
@@ -150,6 +154,7 @@ OCAMLLINKFLAGS = \
        mlguestfs.$(MLARCHIVE) \
        mlgettext.$(MLARCHIVE) \
        mlpcre.$(MLARCHIVE) \
+       mlxml.$(MLARCHIVE) \
        mlcutils.$(MLARCHIVE) \
        mltools.$(MLARCHIVE) \
        mlvisit.$(MLARCHIVE) \
@@ -163,6 +168,7 @@ virt_sysprep_DEPENDENCIES = \
        ../common/mlutils/mlcutils.$(MLARCHIVE) \
        ../common/mlgettext/mlgettext.$(MLARCHIVE) \
        ../common/mlpcre/mlpcre.$(MLARCHIVE) \
+       ../common/mlxml/mlxml.$(MLARCHIVE) \
        ../common/mltools/mltools.$(MLARCHIVE) \
        ../common/mlcustomize/mlcustomize.$(MLARCHIVE) \
        ../customize/customize.$(MLARCHIVE) \
index 38617f5403875bff7c398c315996f0a02a3f11e8..3404640b059963bd38bd70cdd26040254da9a264 100644 (file)
@@ -15,7 +15,7 @@
 @SET_MAKE@
 
 # libguestfs virt-sysprep tool
-# Copyright (C) 2012-2020 Red Hat Inc.
+# Copyright (C) 2012-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -32,7 +32,7 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -487,7 +487,6 @@ EGREP = @EGREP@
 ETAGS = @ETAGS@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FILECMD = @FILECMD@
 GCC_VISIBILITY_HIDDEN = @GCC_VISIBILITY_HIDDEN@
 GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
 GMSGFMT = @GMSGFMT@
@@ -516,6 +515,8 @@ LIBINTL = @LIBINTL@
 LIBLZMA_CFLAGS = @LIBLZMA_CFLAGS@
 LIBLZMA_LIBS = @LIBLZMA_LIBS@
 LIBOBJS = @LIBOBJS@
+LIBOSINFO_CFLAGS = @LIBOSINFO_CFLAGS@
+LIBOSINFO_LIBS = @LIBOSINFO_LIBS@
 LIBS = @LIBS@
 LIBTINFO_CFLAGS = @LIBTINFO_CFLAGS@
 LIBTINFO_LIBS = @LIBTINFO_LIBS@
@@ -586,6 +587,7 @@ PO4A_TRANSLATE = @PO4A_TRANSLATE@
 PODWRAPPER = @PODWRAPPER@
 POSUB = @POSUB@
 RANLIB = @RANLIB@
+REALPATH = @REALPATH@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
@@ -756,6 +758,7 @@ operations = \
        ipa_client \
        kerberos_data \
        kerberos_hostkeytab \
+       lvm_system_devices \
        lvm_uuids \
        logfiles \
        machine_id \
@@ -808,7 +811,8 @@ SOURCES_C = \
 
 @HAVE_OCAML_TRUE@virt_sysprep_CFLAGS = \
 @HAVE_OCAML_TRUE@      $(WARN_CFLAGS) $(WERROR_CFLAGS) \
-@HAVE_OCAML_TRUE@      $(LIBXML2_CFLAGS)
+@HAVE_OCAML_TRUE@      $(LIBXML2_CFLAGS) \
+@HAVE_OCAML_TRUE@      $(LIBOSINFO_CFLAGS)
 
 @HAVE_OCAML_TRUE@BOBJECTS = $(SOURCES_ML:.ml=.cmo)
 @HAVE_OCAML_TRUE@XOBJECTS = $(BOBJECTS:.cmo=.cmx)
@@ -822,6 +826,7 @@ SOURCES_C = \
 @HAVE_OCAML_TRUE@      $(top_builddir)/common/mlutils -I \
 @HAVE_OCAML_TRUE@      $(top_builddir)/common/mlgettext -I \
 @HAVE_OCAML_TRUE@      $(top_builddir)/common/mlpcre -I \
+@HAVE_OCAML_TRUE@      $(top_builddir)/common/mlxml -I \
 @HAVE_OCAML_TRUE@      $(top_builddir)/common/mlvisit -I \
 @HAVE_OCAML_TRUE@      $(top_builddir)/common/mltools -I \
 @HAVE_OCAML_TRUE@      $(top_builddir)/common/mlcustomize -I \
@@ -834,6 +839,7 @@ SOURCES_C = \
 @HAVE_OCAML_TRUE@      $(LIBTINFO_LIBS) \
 @HAVE_OCAML_TRUE@      $(LIBCRYPT_LIBS) \
 @HAVE_OCAML_TRUE@      $(LIBXML2_LIBS) \
+@HAVE_OCAML_TRUE@      $(LIBOSINFO_LIBS) \
 @HAVE_OCAML_TRUE@      $(LIBGUESTFS_LIBS) \
 @HAVE_OCAML_TRUE@      $(LIBINTL) \
 @HAVE_OCAML_TRUE@      -lgnu
@@ -846,6 +852,7 @@ SOURCES_C = \
 @HAVE_OCAML_TRUE@      mlguestfs.$(MLARCHIVE) \
 @HAVE_OCAML_TRUE@      mlgettext.$(MLARCHIVE) \
 @HAVE_OCAML_TRUE@      mlpcre.$(MLARCHIVE) \
+@HAVE_OCAML_TRUE@      mlxml.$(MLARCHIVE) \
 @HAVE_OCAML_TRUE@      mlcutils.$(MLARCHIVE) \
 @HAVE_OCAML_TRUE@      mltools.$(MLARCHIVE) \
 @HAVE_OCAML_TRUE@      mlvisit.$(MLARCHIVE) \
@@ -859,6 +866,7 @@ SOURCES_C = \
 @HAVE_OCAML_TRUE@      ../common/mlutils/mlcutils.$(MLARCHIVE) \
 @HAVE_OCAML_TRUE@      ../common/mlgettext/mlgettext.$(MLARCHIVE) \
 @HAVE_OCAML_TRUE@      ../common/mlpcre/mlpcre.$(MLARCHIVE) \
+@HAVE_OCAML_TRUE@      ../common/mlxml/mlxml.$(MLARCHIVE) \
 @HAVE_OCAML_TRUE@      ../common/mltools/mltools.$(MLARCHIVE) \
 @HAVE_OCAML_TRUE@      ../common/mlcustomize/mlcustomize.$(MLARCHIVE) \
 @HAVE_OCAML_TRUE@      ../customize/customize.$(MLARCHIVE) \
index 087d1a17f3e8921485acb7179e042b05abbaa188..e77ef90694d6384a3122f8e21f4112edfb5f6ebd 100644 (file)
@@ -1,5 +1,5 @@
 (* virt-sysprep
- * Copyright (C) 2012-2020 Red Hat Inc.
+ * Copyright (C) 2012-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -44,6 +44,7 @@ let main () =
     let libvirturi = ref "" in
     let mount_opts = ref "" in
     let network = ref false in
+    let no_network = ref false in
     let operations = ref None in
 
     let format = ref "auto" in
@@ -57,7 +58,8 @@ let main () =
       let uri =
         try URI.parse_uri arg
         with URI.Parse_failed ->
-          error (f_"error parsing URI ‘%s’. Look for error messages printed above.") arg in
+          error (f_"error parsing URI ‘%s’. \
+                    Look for error messages printed above.") arg in
       let format = match !format with "auto" -> None | fmt -> Some fmt in
       List.push_front (uri, format) files;
       format_consumed := true
@@ -102,7 +104,8 @@ let main () =
           | `Add "" | `Remove "" ->
             error (f_"--operations: empty operation name")
           | `Add "defaults" -> Sysprep_operation.add_defaults_to_set opset
-          | `Remove "defaults" -> Sysprep_operation.remove_defaults_from_set opset
+          | `Remove "defaults" ->
+             Sysprep_operation.remove_defaults_from_set opset
           | `Add "all" -> Sysprep_operation.add_all_to_set opset
           | `Remove "all" -> Sysprep_operation.remove_all_from_set opset
           | `Add n | `Remove n ->
@@ -131,9 +134,7 @@ let main () =
       [ L"list-operations" ], Getopt.Unit list_operations, s_"List supported operations";
       [ L"mount-options" ], Getopt.Set_string (s_"opts", mount_opts),  s_"Set mount options (eg /:noatime;/var:rw,noatime)";
       [ L"network" ], Getopt.Set network,           s_"Enable appliance network";
-      [ L"no-network" ], Getopt.Clear network,      s_"Disable appliance network (default)";
-      [ L"no-selinux-relabel" ], Getopt.Unit (fun () -> ()),
-                                              s_"Compatibility option, does nothing";
+      [ L"no-network" ], Getopt.Set no_network,     s_"Disable appliance network (default)";
       [ L"operation"; L"operations" ],  Getopt.String (s_"operations", set_operations), s_"Enable/disable specific operations";
     ] in
     let args = basic_args @ Sysprep_operation.extra_args () in
@@ -162,7 +163,8 @@ read the man page virt-sysprep(1).
     let add =
       match files, domain with
       | [], None ->
-        error (f_"you must give either -a or -d options.  Read virt-sysprep(1) man page for further information.")
+        error (f_"you must give either -a or -d options.  \
+                  Read virt-sysprep(1) man page for further information.")
       | [], Some dom ->
         fun (g : Guestfs.guestfs) readonly ->
           let allowuuid = true in
@@ -173,7 +175,8 @@ read the man page virt-sysprep(1).
                     ?libvirturi ~allowuuid ~readonlydisk
                     dom)
       | _::_, Some _ ->
-        error (f_"you cannot give -a and -d options together.  Read virt-sysprep(1) man page for further information.")
+        error (f_"you cannot give -a and -d options together.  \
+                  Read virt-sysprep(1) man page for further information.")
       | files, None ->
         fun g readonly ->
           List.iter (
@@ -190,6 +193,7 @@ read the man page virt-sysprep(1).
     (* Dereference the rest of the args. *)
     let dryrun = !dryrun in
     let network = !network in
+    let no_network = !no_network in
     let operations = !operations in
 
     (* At this point we know which operations are enabled.  So call the
@@ -210,7 +214,8 @@ read the man page virt-sysprep(1).
 
     (* Connect to libguestfs. *)
     let g = open_guestfs () in
-    g#set_network network;
+    g#set_network (not no_network &&
+                   (network || key_store_requires_network opthandle.ks));
     add g dryrun;
     g#launch ();
 
index 40b030b6e491b77b97c67e93605cad31a774d4c1..5f9c4b9a9bc6187af1ba87d622e9b13f64b797e7 100644 (file)
@@ -1,5 +1,5 @@
 (* virt-sysprep
- * Copyright (C) 2012-2020 Red Hat Inc.
+ * Copyright (C) 2012-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index 53f04240281575dfa6340f35dc3c9fa0b3b79e16..17c0440d4670a15e420a71d36e4ea8b2e4ea2bea 100644 (file)
@@ -224,8 +224,8 @@ let dump_pod_options () =
 
     | (op_name,
        { extra_argspec = (arg_names,
-                          (Getopt.String _ | Getopt.Set_string _ | Getopt.Int _ |
-                           Getopt.Set_int _ | Getopt.Symbol _),
+                          (Getopt.String _ | Getopt.Set_string _ |
+                           Getopt.Int _ | Getopt.Set_int _ | Getopt.Symbol _),
                           _);
          extra_pod_argval = Some arg_val;
          extra_pod_description = pod }) ->
@@ -243,7 +243,8 @@ let dump_pod_options () =
   let args = List.flatten args in
 
   let args =
-    List.sort (fun (a, _) (b, _) -> Getopt.compare_command_line_args a b) args in
+    List.sort (fun (a, _) (b, _) ->
+        Getopt.compare_command_line_args a b) args in
 
   List.iter (
     fun (arg_name, (op_name, heading, pod)) ->
index 896a7b3e3437744e92d78be4c5f36e66bf9ff174..5d1afd3c44a5a71f74f5d1b0093efab96d6dc48c 100644 (file)
@@ -1,5 +1,5 @@
 (* virt-sysprep
- * Copyright (C) 2012-2020 Red Hat Inc.
+ * Copyright (C) 2012-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index a2b7986c19e2495b95c3ab3c07545edcf92a80a6..502b9264d2a02f637a716e9bacbea164896d473e 100644 (file)
@@ -33,7 +33,8 @@ let ca_certificates_perform (g : Guestfs.guestfs) root side_effects =
     let excepts = [ "/etc/pki/tls/certs/ca-bundle.crt";
                     "/etc/pki/tls/certs/ca-bundle.trust.crt"; ] in
     (* Thanks Rich for this StringSet method *)
-    let paths = List.concat (List.map Array.to_list (List.map g#glob_expand paths)) in
+    let paths = List.concat (List.map Array.to_list
+                               (List.map g#glob_expand paths)) in
     let set = List.fold_right StringSet.add paths StringSet.empty in
     let excepts = List.fold_right StringSet.add excepts StringSet.empty in
     let set = StringSet.diff set excepts in
index 6e64a754ae1188da31e603c8cc0eb859088906fc..59df0d3fac606ceed8067f5fa3074e62969869a6 100644 (file)
@@ -29,7 +29,8 @@ let ipa_client_perform (g : Guestfs.guestfs) root side_effects =
                   "/etc/ipa/default.conf";
                   "/var/lib/ipa-client/sysrestore/*";
                   "/var/lib/ipa-client/pki/*" ] in
-    let paths = List.concat (List.map Array.to_list (List.map g#glob_expand paths)) in
+    let paths = List.concat (List.map Array.to_list
+                               (List.map g#glob_expand paths)) in
     List.iter (
       fun filename ->
         try g#rm filename with G.Error _ -> ()
diff --git a/sysprep/sysprep_operation_lvm_system_devices.ml b/sysprep/sysprep_operation_lvm_system_devices.ml
new file mode 100644 (file)
index 0000000..117d228
--- /dev/null
@@ -0,0 +1,44 @@
+(* virt-sysprep
+ * Copyright (C) 2012-2023 Red Hat Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *)
+
+open Sysprep_operation
+open Common_gettext.Gettext
+
+module G = Guestfs
+
+let system_devices_file = "/etc/lvm/devices/system.devices"
+
+let rec lvm_system_devices_perform g root side_effects =
+  let typ = g#inspect_get_type root in
+  if typ = "linux" then g#rm_f system_devices_file
+
+let op = {
+  defaults with
+    name = "lvm-system-devices";
+    enabled_by_default = true;
+    heading = s_"Remove LVM2 system.devices file";
+    pod_description =
+      Some (s_"On Linux guests, LVM2's scanning for physical volumes (PVs) may \
+               be restricted to those block devices whose WWIDs are listed in \
+               C<" ^ system_devices_file ^ ">.  When cloning VMs, WWIDs may \
+               change, breaking C<lvm pvscan>.  Remove \
+               C<" ^ system_devices_file ^ ">.");
+    perform_on_filesystems = Some lvm_system_devices_perform;
+}
+
+let () = register_operation op
diff --git a/sysprep/sysprep_operation_lvm_system_devices.mli b/sysprep/sysprep_operation_lvm_system_devices.mli
new file mode 100644 (file)
index 0000000..57df760
--- /dev/null
@@ -0,0 +1,2 @@
+(* This file is generated by Makefile.am. *)
+(* Nothing is exported from operation modules. *)
index c67b2148765bc2be7542ade8b8b369129f32b837..5fc623039479a7c4758a7167d2d92022b6fa7a45 100644 (file)
@@ -30,7 +30,46 @@ let rec lvm_uuids_perform g root side_effects =
       try g#available [|"lvm2"|]; true with G.Error _ -> false in
     if has_lvm2_feature then (
       let has_pvs, has_vgs = g#pvs () <> [||], g#vgs () <> [||] in
-      if has_pvs || has_vgs then g#vg_activate_all false;
+      if has_pvs || has_vgs then (
+        try g#vg_activate_all false
+        with G.Error _ as exn ->
+          (* If the "luks" feature is not available, re-raise the exception. *)
+          (try g#available [|"luks"|] with G.Error _ -> raise exn);
+
+          (* Assume VG deactivation failed due to the guest using the
+           * FS-on-LUKS-on-LVM scheme.
+           *
+           * By now, we have unmounted filesystems, but the decrypted LUKS
+           * devices still keep the LVs open. Therefore, attempt closing all
+           * decrypted LUKS devices that were opened by inspection (i.e., device
+           * nodes with pathnames like "/dev/mapper/luks-<uuid>"). Closing the
+           * decrypted LUKS devices should remove the references from their
+           * underlying LVs, and then VG deactivation should succeed too.
+           *
+           * Note that closing the decrypted LUKS devices prevents the
+           * blockdev-level manipulation of those filesystems that reside on
+           * said decrypted LUKS devices, such as the "fs-uuids" operation. But
+           * that should be OK, as we order the present operation after all
+           * other block device ops.
+           *
+           * In case the guest uses the FS-on-LVM-on-LUKS scheme, then the
+           * original VG deactivation must have failed for a different reason.
+           * (As we have unmounted filesystems earlier, and LUKS is below, not
+           * on top of, LVM.) The LUKS-closing attempts below will fail then,
+           * due to LVM keeping the decrypted LUKS devices open. This failure is
+           * harmless and can be considered a no-op. The final, retried VG
+           * deactivation should reproduce the original failure.
+           *)
+          let luks_re = PCRE.compile ("^/dev/mapper/luks" ^
+                                      "-[[:xdigit:]]{8}" ^
+                                      "(?:-[[:xdigit:]]{4}){3}" ^
+                                      "-[[:xdigit:]]{12}$")
+          and dmdevs = Array.to_list (g#list_dm_devices ()) in
+          let plaintext_devs = List.filter (PCRE.matches luks_re) dmdevs in
+          List.iter (fun dev -> try g#cryptsetup_close dev with _ -> ())
+            plaintext_devs;
+          g#vg_activate_all false
+      );
       if has_pvs then g#pvchange_uuid_all ();
       if has_vgs then g#vgchange_uuid_all ();
       if has_pvs || has_vgs then g#vg_activate_all true
@@ -39,6 +78,7 @@ let rec lvm_uuids_perform g root side_effects =
 
 let op = {
   defaults with
+    order = 99; (* Run it after other block device ops. *)
     name = "lvm-uuids";
     enabled_by_default = true;
     heading = s_"Change LVM2 PV and VG UUIDs";
index 3ffaa7c16958288a358bd36c458ca69dbaf8c0e4..cc1ef39f2f6c1e79c24537ac3f028e13c07bbc62 100644 (file)
@@ -28,7 +28,8 @@ let net_hostname_perform (g : Guestfs.guestfs) root side_effects =
   let typ = g#inspect_get_type root in
   let distro = g#inspect_get_distro root in
   match typ, distro with
-  | "linux", ("fedora"|"rhel"|"centos"|"scientificlinux"|"oraclelinux"|"redhat-based") ->
+  | "linux", ("fedora"|"rhel"|"centos"|"scientificlinux"|"oraclelinux"|
+              "redhat-based") ->
     let filenames = g#glob_expand "/etc/sysconfig/network-scripts/ifcfg-*" in
     Array.iter (
       fun filename ->
@@ -50,7 +51,8 @@ let op = {
   defaults with
     name = "net-hostname";
     enabled_by_default = true;
-    heading = s_"Remove HOSTNAME and DHCP_HOSTNAME in network interface configuration";
+    heading = s_"Remove HOSTNAME and DHCP_HOSTNAME in \
+                 network interface configuration";
     pod_description = Some (s_"\
 For Fedora and Red Hat Enterprise Linux,
 this is removed from C<ifcfg-*> files.");
index 0f0de65cb73706a3bb4be47b4cdb846fbd727901..c3c83f54c3208aff98762eef65fb5fa6921b939f 100644 (file)
@@ -28,7 +28,8 @@ let net_hwaddr_perform (g : Guestfs.guestfs) root side_effects =
   let typ = g#inspect_get_type root in
   let distro = g#inspect_get_distro root in
   match typ, distro with
-  | "linux", ("fedora"|"rhel"|"centos"|"scientificlinux"|"oraclelinux"|"redhat-based") ->
+  | "linux", ("fedora"|"rhel"|"centos"|"scientificlinux"|"oraclelinux"|
+              "redhat-based") ->
     let filenames = g#glob_expand "/etc/sysconfig/network-scripts/ifcfg-*" in
     Array.iter (
       fun filename ->
index 2d8667f19dfa636732078df667d2890a6a036d65..6be1f68c679af424df9c023ab5f9d02107e5f74d 100644 (file)
@@ -1,5 +1,5 @@
 (* virt-sysprep
- * Copyright (C) 2012-2021 Red Hat Inc.
+ * Copyright (C) 2012-2023 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index 7c734a493b4082606f50f2005c875f201061b2c5..a463a78172d35d976c45d64ce6def94cca4821f0 100644 (file)
@@ -25,7 +25,8 @@ let pacct_log_perform (g : Guestfs.guestfs) root side_effects =
   let typ = g#inspect_get_type root in
   let distro = g#inspect_get_distro root in
   match typ, distro with
-  | "linux", ("fedora"|"rhel"|"centos"|"scientificlinux"|"oraclelinux"|"redhat-based") ->
+  | "linux", ("fedora"|"rhel"|"centos"|"scientificlinux"|"oraclelinux"|
+              "redhat-based") ->
     let files = g#glob_expand "/var/account/pacct*" in
     Array.iter (
       fun file ->
index bb105f57fc01ca7bb5042cfb3d72138750f35d2e..fff5e4d519ae52ddd7f5ed18414a3495b70351b1 100644 (file)
@@ -132,7 +132,9 @@ B<Note:> This is different from I<--firstboot> scripts (which run
 in the context of the guest when it is booting first time).
 I<--script> scripts run on the host, not in the guest.");
     extra_args = [
-      { extra_argspec = [ L"scriptdir" ], Getopt.String (s_"dir", set_scriptdir), s_"Mount point on host";
+      { extra_argspec = [ L"scriptdir" ],
+                        Getopt.String (s_"dir", set_scriptdir),
+                        s_"Mount point on host";
         extra_pod_argval = Some "SCRIPTDIR";
         extra_pod_description = s_"\
 The mount point (an empty directory on the host) used when
@@ -145,7 +147,9 @@ If I<--scriptdir> is not specified then a temporary mountpoint
 will be created."
       };
 
-      { extra_argspec = [ L"script" ], Getopt.String (s_"script", add_script), s_"Script or program to run on guest";
+      { extra_argspec = [ L"script" ],
+                        Getopt.String (s_"script", add_script),
+                        s_"Script or program to run on guest";
         extra_pod_argval = Some "SCRIPT";
         extra_pod_description = s_"\
 Run the named C<SCRIPT> (a shell script or program) against the
index e7d89235e26dc06ec04328c68fd809fbbf02ffdb..b7be76d7a6a4b479da78b3f7381ac7b4542277ee 100644 (file)
@@ -109,7 +109,9 @@ The \"root\" account is not removed.
 See the I<--remove-user-accounts> parameter for a way to specify
 how to remove only some users, or to not remove some others.");
     extra_args = [
-      { extra_argspec = [ L"remove-user-accounts" ], Getopt.String (s_"users", add_users remove_users), s_"Users to remove";
+      { extra_argspec = [ L"remove-user-accounts" ],
+                        Getopt.String (s_"users", add_users remove_users),
+                        s_"Users to remove";
         extra_pod_argval = Some "USERS";
         extra_pod_description = s_"\
 The user accounts to be removed from the guest.
@@ -124,7 +126,9 @@ would only remove the user accounts C<bob> and C<eve>.
 This option can be specified multiple times."
       };
 
-      { extra_argspec = [ L"keep-user-accounts" ], Getopt.String (s_"users", add_users keep_users), s_"Users to keep";
+      { extra_argspec = [ L"keep-user-accounts" ],
+                        Getopt.String (s_"users", add_users keep_users),
+                        s_"Users to keep";
         extra_pod_argval = Some "USERS";
         extra_pod_description = s_"\
 The user accounts to be kept in the guest.
@@ -142,9 +146,11 @@ This option can be specified multiple times."
     perform_on_filesystems = Some user_account_perform;
     not_enabled_check_args = fun () ->
       if not (StringSet.is_empty !keep_users) then
-        error (f_"user-accounts: --keep-user-accounts parameter was used, but the \"user-account\" operation is not enabled");
+        error (f_"user-accounts: --keep-user-accounts parameter was used, \
+                  but the \"user-account\" operation is not enabled");
       if not (StringSet.is_empty !remove_users) then
-        error (f_"user-accounts: --remove-user-accounts parameter was used, but the \"user-account\" operation is not enabled");
+        error (f_"user-accounts: --remove-user-accounts parameter was used, \
+                  but the \"user-account\" operation is not enabled");
 }
 
 let () = register_operation op
index 51500b5e97998cab3b01401a16862b9781357044..9d0298d685572aa9caeb88572422dd4d8a76f561 100755 (executable)
@@ -25,4 +25,4 @@ $top_srcdir/podcheck.pl "$srcdir/virt-sysprep.pod" virt-sysprep \
     --path $top_srcdir/common/options \
     --insert sysprep-extra-options.pod:__EXTRA_OPTIONS__ \
     --insert sysprep-operations.pod:__OPERATIONS__ \
-    --ignore=--dryrun,--dump-pod,--dump-pod-options,--no-selinux-relabel
+    --ignore=--dryrun,--dump-pod,--dump-pod-options
index e8feaef8fe238dd080051bab5a87def2351bac22..80b5b464d970635c3a060ff2649241f2666b1f60 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/bash -
 # libguestfs virt-sysprep test --script option
-# Copyright (C) 2011-2012 Red Hat Inc.
+# Copyright (C) 2011-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index 40dd12a19d56456e22e046dfa446657b1de78a77..10980d85efbcdb534f43b2bad1e3dd504eecb81c 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/bash -
 # libguestfs virt-sysprep test script
-# Copyright (C) 2011-2012 Red Hat Inc.
+# Copyright (C) 2011-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index 29460b3c0055798e8813a36ffeca051e87866ab4..7ad41db49da10a60340d03bbe0c40daeef6cc0d8 100644 (file)
@@ -54,12 +54,14 @@ and update_system_ca_store_command g root =
   let typ = g#inspect_get_type root in
   let distro = g#inspect_get_distro root in
   match typ, distro with
-  | "linux", ("fedora"|"rhel"|"centos"|"scientificlinux"|"oraclelinux"|"redhat-based") ->
+  | "linux", ("fedora"|"rhel"|"centos"|"scientificlinux"|"oraclelinux"|
+              "redhat-based") ->
     Some [ "update-ca-trust"; "extract" ]
 
   | "linux", ("debian"|"ubuntu"|"kalilinux") ->
     Some [ "update-ca-certificates" ]
 
   | _, _ ->
-    warning (f_"updating the system CA store on this guest %s/%s is not supported") typ distro;
+    warning (f_"updating the system CA store on this guest %s/%s \
+                is not supported") typ distro;
     None
index deeb5341e57ccd9a582023949ed434241ca8a251..0bcdc4dec2727b1620f6a72ee645210169643d86 100644 (file)
@@ -519,6 +519,13 @@ Either or both options can be used multiple times on the command line.
 
 =head1 SECURITY
 
+Virtual machines that employ full disk encryption I<internally to the
+guest> should not be considered for cloning and distribution, as it
+provides multiple parties with the same internal volume key, enabling
+any one such party to decrypt all the other clones.  Refer to the L<LUKS
+FAQ|https://gitlab.com/cryptsetup/cryptsetup/-/blob/main/FAQ.md> for
+details.
+
 Although virt-sysprep removes some sensitive information from the
 guest, it does not pretend to remove all of it.  You should examine
 the L</OPERATIONS> above and the guest afterwards.
@@ -626,6 +633,6 @@ Wanlong Gao, Fujitsu Ltd.
 
 =head1 COPYRIGHT
 
-Copyright (C) 2011-2020 Red Hat Inc.
+Copyright (C) 2011-2023 Red Hat Inc.
 
 Copyright (C) 2012 Fujitsu Ltd.
index d818037dcea71b3f6648fd5eed087d900e1b7885..4910c50660630b88b46531b2db6d6e77e010df76 100644 (file)
@@ -1,5 +1,5 @@
 # libguestfs test images
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index 78b225d3d41849df6cd29c439f9d77223ee51878..35b42ed3a0706e85878f27c4e0283687ad79ed4a 100644 (file)
@@ -15,7 +15,7 @@
 @SET_MAKE@
 
 # libguestfs test images
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -32,7 +32,7 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -278,7 +278,6 @@ EGREP = @EGREP@
 ETAGS = @ETAGS@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FILECMD = @FILECMD@
 GCC_VISIBILITY_HIDDEN = @GCC_VISIBILITY_HIDDEN@
 GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
 GMSGFMT = @GMSGFMT@
@@ -307,6 +306,8 @@ LIBINTL = @LIBINTL@
 LIBLZMA_CFLAGS = @LIBLZMA_CFLAGS@
 LIBLZMA_LIBS = @LIBLZMA_LIBS@
 LIBOBJS = @LIBOBJS@
+LIBOSINFO_CFLAGS = @LIBOSINFO_CFLAGS@
+LIBOSINFO_LIBS = @LIBOSINFO_LIBS@
 LIBS = @LIBS@
 LIBTINFO_CFLAGS = @LIBTINFO_CFLAGS@
 LIBTINFO_LIBS = @LIBTINFO_LIBS@
@@ -377,6 +378,7 @@ PO4A_TRANSLATE = @PO4A_TRANSLATE@
 PODWRAPPER = @PODWRAPPER@
 POSUB = @POSUB@
 RANLIB = @RANLIB@
+REALPATH = @REALPATH@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
index 0e1f7bb8ef5e5dd19d602ae978295378880bb022..3e5cec8f2d973e3c41580d8f8d957c26a5a813b0 100644 (file)
@@ -1,5 +1,5 @@
 # libguestfs test images
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index 35c38d80d0c8ef1ca8ea1d359d2a9bed3fb1d745..69b51d2009e60faa78ed6d3b5fcc024692333122 100644 (file)
@@ -15,7 +15,7 @@
 @SET_MAKE@
 
 # libguestfs test images
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -32,7 +32,7 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -218,7 +218,6 @@ EGREP = @EGREP@
 ETAGS = @ETAGS@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FILECMD = @FILECMD@
 GCC_VISIBILITY_HIDDEN = @GCC_VISIBILITY_HIDDEN@
 GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
 GMSGFMT = @GMSGFMT@
@@ -247,6 +246,8 @@ LIBINTL = @LIBINTL@
 LIBLZMA_CFLAGS = @LIBLZMA_CFLAGS@
 LIBLZMA_LIBS = @LIBLZMA_LIBS@
 LIBOBJS = @LIBOBJS@
+LIBOSINFO_CFLAGS = @LIBOSINFO_CFLAGS@
+LIBOSINFO_LIBS = @LIBOSINFO_LIBS@
 LIBS = @LIBS@
 LIBTINFO_CFLAGS = @LIBTINFO_CFLAGS@
 LIBTINFO_LIBS = @LIBTINFO_LIBS@
@@ -317,6 +318,7 @@ PO4A_TRANSLATE = @PO4A_TRANSLATE@
 PODWRAPPER = @PODWRAPPER@
 POSUB = @POSUB@
 RANLIB = @RANLIB@
+REALPATH = @REALPATH@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
index fef240be2ad5edb44fed5b1b4538fbcf073b8943..58ceda3010c0e2c004c572cf814debc09d1755fc 100644 (file)
@@ -1,5 +1,5 @@
 # libguestfs test images
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index 1ec01d30fd969b23e5c586595b14e77b8df59093..6983b2a70ff240f4b960ffcfbf964f8cb966600f 100644 (file)
@@ -15,7 +15,7 @@
 @SET_MAKE@
 
 # libguestfs test images
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -32,7 +32,7 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -220,7 +220,6 @@ EGREP = @EGREP@
 ETAGS = @ETAGS@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FILECMD = @FILECMD@
 GCC_VISIBILITY_HIDDEN = @GCC_VISIBILITY_HIDDEN@
 GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
 GMSGFMT = @GMSGFMT@
@@ -249,6 +248,8 @@ LIBINTL = @LIBINTL@
 LIBLZMA_CFLAGS = @LIBLZMA_CFLAGS@
 LIBLZMA_LIBS = @LIBLZMA_LIBS@
 LIBOBJS = @LIBOBJS@
+LIBOSINFO_CFLAGS = @LIBOSINFO_CFLAGS@
+LIBOSINFO_LIBS = @LIBOSINFO_LIBS@
 LIBS = @LIBS@
 LIBTINFO_CFLAGS = @LIBTINFO_CFLAGS@
 LIBTINFO_LIBS = @LIBTINFO_LIBS@
@@ -319,6 +320,7 @@ PO4A_TRANSLATE = @PO4A_TRANSLATE@
 PODWRAPPER = @PODWRAPPER@
 POSUB = @POSUB@
 RANLIB = @RANLIB@
+REALPATH = @REALPATH@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
index a3d7288f9459559cfb5b517c06333a020ec145f5..bb0356414af35fb506c08f7251ca771d944f2d2f 100644 (file)
@@ -1,5 +1,5 @@
 # libguestfs test images
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index 0b51a5ee729b02ff450aad15cfab514f222a7426..88564092412a11ef39575eb53ec90fb48d0e8b7d 100644 (file)
@@ -15,7 +15,7 @@
 @SET_MAKE@
 
 # libguestfs test images
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -32,7 +32,7 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -220,7 +220,6 @@ EGREP = @EGREP@
 ETAGS = @ETAGS@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FILECMD = @FILECMD@
 GCC_VISIBILITY_HIDDEN = @GCC_VISIBILITY_HIDDEN@
 GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
 GMSGFMT = @GMSGFMT@
@@ -249,6 +248,8 @@ LIBINTL = @LIBINTL@
 LIBLZMA_CFLAGS = @LIBLZMA_CFLAGS@
 LIBLZMA_LIBS = @LIBLZMA_LIBS@
 LIBOBJS = @LIBOBJS@
+LIBOSINFO_CFLAGS = @LIBOSINFO_CFLAGS@
+LIBOSINFO_LIBS = @LIBOSINFO_LIBS@
 LIBS = @LIBS@
 LIBTINFO_CFLAGS = @LIBTINFO_CFLAGS@
 LIBTINFO_LIBS = @LIBTINFO_LIBS@
@@ -319,6 +320,7 @@ PO4A_TRANSLATE = @PO4A_TRANSLATE@
 PODWRAPPER = @PODWRAPPER@
 POSUB = @POSUB@
 RANLIB = @RANLIB@
+REALPATH = @REALPATH@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
index 0a41f168bdfc08a7af35afe53e394710d67546ef..3c11f3fde8c044e58906f8721ba5733674a276b1 100644 (file)
@@ -1,5 +1,5 @@
 # libguestfs test images
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -77,7 +77,8 @@ blank-%.img:
 # Make a (dummy) Fedora image.
 fedora.img: make-fedora-img.pl \
                fedora-journal.tar.xz \
-               fedora.db
+               fedora.db \
+               fedora-static-bin
        SRCDIR=$(srcdir) LAYOUT=partitions $(top_builddir)/run --test ./$<
 
 # Make a (dummy) Fedora image using md devices
@@ -85,7 +86,8 @@ fedora-md1.img fedora-md2.img: stamp-fedora-md.img
 
 stamp-fedora-md.img: make-fedora-img.pl \
                fedora-journal.tar.xz \
-               fedora.db
+               fedora.db \
+               fedora-static-bin
        rm -f $@
        SRCDIR=$(srcdir) LAYOUT=partitions-md $(top_builddir)/run --test ./$<
        touch $@
@@ -94,19 +96,22 @@ stamp-fedora-md.img: make-fedora-img.pl \
 # for root and home.
 fedora-btrfs.img: make-fedora-img.pl \
                fedora-journal.tar.xz \
-               fedora.db
+               fedora.db \
+               fedora-static-bin
        SRCDIR=$(srcdir) LAYOUT=btrfs $(top_builddir)/run --test ./$<
 
 # Make a (dummy) Fedora image with LUKS-on-LVM.
 fedora-luks-on-lvm.img: make-fedora-img.pl \
                fedora-journal.tar.xz \
-               fedora.db
+               fedora.db \
+               fedora-static-bin
        SRCDIR=$(srcdir) LAYOUT=luks-on-lvm $(top_builddir)/run --test ./$<
 
 # Make a (dummy) Fedora image with LVM-on-LUKS.
 fedora-lvm-on-luks.img: make-fedora-img.pl \
                fedora-journal.tar.xz \
-               fedora.db
+               fedora.db \
+               fedora-static-bin
        SRCDIR=$(srcdir) LAYOUT=lvm-on-luks $(top_builddir)/run --test ./$<
 
 # Make a (dummy) Debian image.
@@ -144,6 +149,13 @@ fedora.db: fedora-db.sql.xz
        xzcat $< | $(SQLITE3) $@-t
        mv $@-t $@
 
+# This is included in the phony Fedora image to act as a phony "rpm"
+# and "dracut" command.  For the use of -all-static here, see
+# libguestfs/tests/Makefile.am
+check_PROGRAMS = fedora-static-bin
+fedora_static_bin_SOURCES = fedora.c
+fedora_static_bin_LDFLAGS = -all-static
+
 windows-software: windows-software.reg
        rm -f $@ $@-t
        cp $(srcdir)/minimal-hive $@-t
index d87d51db7cc9ecbeb14f83482ed9abe18b381a9c..6452aa387336c47a666228a5eb20ad62714322b7 100644 (file)
@@ -15,7 +15,7 @@
 @SET_MAKE@
 
 # libguestfs test images
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -32,7 +32,7 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -143,6 +143,7 @@ PRE_UNINSTALL = :
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
+check_PROGRAMS = fedora-static-bin$(EXEEXT)
 subdir = test-data/phony-guests
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
@@ -164,6 +165,17 @@ mkinstalldirs = $(install_sh) -d
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES = guests.xml
 CONFIG_CLEAN_VPATH_FILES =
+am_fedora_static_bin_OBJECTS = fedora.$(OBJEXT)
+fedora_static_bin_OBJECTS = $(am_fedora_static_bin_OBJECTS)
+fedora_static_bin_LDADD = $(LDADD)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+fedora_static_bin_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+       $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+       $(AM_CFLAGS) $(CFLAGS) $(fedora_static_bin_LDFLAGS) $(LDFLAGS) \
+       -o $@
 AM_V_P = $(am__v_P_@AM_V@)
 am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
 am__v_P_0 = false
@@ -176,16 +188,56 @@ AM_V_at = $(am__v_at_@AM_V@)
 am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
 am__v_at_0 = @
 am__v_at_1 = 
-SOURCES =
-DIST_SOURCES =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = ./$(DEPDIR)/fedora.Po
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+       $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+       $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+       $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = $(fedora_static_bin_SOURCES)
+DIST_SOURCES = $(fedora_static_bin_SOURCES)
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
     n|no|NO) false;; \
     *) (install-info --version) >/dev/null 2>&1;; \
   esac
 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
 am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/guests.xml.in \
-       $(top_srcdir)/common-rules.mk $(top_srcdir)/subdir-rules.mk
+       $(top_srcdir)/build-aux/depcomp $(top_srcdir)/common-rules.mk \
+       $(top_srcdir)/subdir-rules.mk
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
@@ -218,7 +270,6 @@ EGREP = @EGREP@
 ETAGS = @ETAGS@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FILECMD = @FILECMD@
 GCC_VISIBILITY_HIDDEN = @GCC_VISIBILITY_HIDDEN@
 GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
 GMSGFMT = @GMSGFMT@
@@ -247,6 +298,8 @@ LIBINTL = @LIBINTL@
 LIBLZMA_CFLAGS = @LIBLZMA_CFLAGS@
 LIBLZMA_LIBS = @LIBLZMA_LIBS@
 LIBOBJS = @LIBOBJS@
+LIBOSINFO_CFLAGS = @LIBOSINFO_CFLAGS@
+LIBOSINFO_LIBS = @LIBOSINFO_LIBS@
 LIBS = @LIBS@
 LIBTINFO_CFLAGS = @LIBTINFO_CFLAGS@
 LIBTINFO_LIBS = @LIBTINFO_LIBS@
@@ -317,6 +370,7 @@ PO4A_TRANSLATE = @PO4A_TRANSLATE@
 PODWRAPPER = @PODWRAPPER@
 POSUB = @POSUB@
 RANLIB = @RANLIB@
+REALPATH = @REALPATH@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
@@ -502,10 +556,12 @@ disk_images = \
 # This is 'check_DATA' because we don't need it until 'make check'
 # time and we need the tools we have built in order to make it.
 check_DATA = $(disk_images) guests-all-good.xml
+fedora_static_bin_SOURCES = fedora.c
+fedora_static_bin_LDFLAGS = -all-static
 all: all-am
 
 .SUFFIXES:
-.SUFFIXES: .cmo .cmi .cmx .ml .mli .mll .mly .po .gmo
+.SUFFIXES: .cmo .cmi .cmx .ml .mli .mll .mly .po .gmo .c .lo .o .obj
 $(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(top_srcdir)/subdir-rules.mk $(top_srcdir)/common-rules.mk $(am__configure_deps)
        @for dep in $?; do \
          case '$(am__configure_deps)' in \
@@ -539,17 +595,114 @@ $(am__aclocal_m4_deps):
 guests.xml: $(top_builddir)/config.status $(srcdir)/guests.xml.in
        cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
 
+clean-checkPROGRAMS:
+       @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+       echo " rm -f" $$list; \
+       rm -f $$list || exit $$?; \
+       test -n "$(EXEEXT)" || exit 0; \
+       list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+       echo " rm -f" $$list; \
+       rm -f $$list
+
+fedora-static-bin$(EXEEXT): $(fedora_static_bin_OBJECTS) $(fedora_static_bin_DEPENDENCIES) $(EXTRA_fedora_static_bin_DEPENDENCIES) 
+       @rm -f fedora-static-bin$(EXEEXT)
+       $(AM_V_CCLD)$(fedora_static_bin_LINK) $(fedora_static_bin_OBJECTS) $(fedora_static_bin_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fedora.Po@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+       @$(MKDIR_P) $(@D)
+       @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@   $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@   $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+@am__fastdepCC_TRUE@   $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@   $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
+@am__fastdepCC_TRUE@   $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@   $(am__mv) $$depbase.Tpo $$depbase.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
 mostlyclean-libtool:
        -rm -f *.lo
 
 clean-libtool:
        -rm -rf .libs _libs
-tags TAGS:
-
-ctags CTAGS:
 
-cscope cscopelist:
+ID: $(am__tagged_files)
+       $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       set x; \
+       here=`pwd`; \
+       $(am__define_uniq_tagged_files); \
+       shift; \
+       if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         if test $$# -gt 0; then \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             "$$@" $$unique; \
+         else \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             $$unique; \
+         fi; \
+       fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       $(am__define_uniq_tagged_files); \
+       test -z "$(CTAGS_ARGS)$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && $(am__cd) $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+       list='$(am__tagged_files)'; \
+       case "$(srcdir)" in \
+         [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+         *) sdir=$(subdir)/$(srcdir) ;; \
+       esac; \
+       for i in $$list; do \
+         if test -f "$$i"; then \
+           echo "$(subdir)/$$i"; \
+         else \
+           echo "$$sdir/$$i"; \
+         fi; \
+       done >> $(top_builddir)/cscope.files
 
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
 distdir: $(BUILT_SOURCES)
        $(MAKE) $(AM_MAKEFLAGS) distdir-am
 
@@ -584,7 +737,7 @@ distdir-am: $(DISTFILES)
          fi; \
        done
 check-am: all-am
-       $(MAKE) $(AM_MAKEFLAGS) $(check_DATA)
+       $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(check_DATA)
 check: check-am
 all-am: Makefile
 installdirs:
@@ -622,11 +775,14 @@ maintainer-clean-generic:
        @echo "it deletes files that may require special tools to rebuild."
 clean: clean-am
 
-clean-am: clean-generic clean-libtool mostlyclean-am
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+       mostlyclean-am
 
 distclean: distclean-am
+               -rm -f ./$(DEPDIR)/fedora.Po
        -rm -f Makefile
-distclean-am: clean-am distclean-generic
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
 
 dvi: dvi-am
 
@@ -669,12 +825,14 @@ install-ps-am:
 installcheck-am:
 
 maintainer-clean: maintainer-clean-am
+               -rm -f ./$(DEPDIR)/fedora.Po
        -rm -f Makefile
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
 mostlyclean: mostlyclean-am
 
-mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-libtool
 
 pdf: pdf-am
 
@@ -688,17 +846,19 @@ uninstall-am:
 
 .MAKE: check-am install-am install-strip
 
-.PHONY: all all-am check check-am clean clean-generic clean-libtool \
-       cscopelist-am ctags-am distclean distclean-generic \
-       distclean-libtool distdir dvi dvi-am html html-am info info-am \
-       install install-am install-data install-data-am install-dvi \
-       install-dvi-am install-exec install-exec-am install-html \
-       install-html-am install-info install-info-am install-man \
-       install-pdf install-pdf-am install-ps install-ps-am \
-       install-strip installcheck installcheck-am installdirs \
-       maintainer-clean maintainer-clean-generic mostlyclean \
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
+       clean-checkPROGRAMS clean-generic clean-libtool cscopelist-am \
+       ctags ctags-am distclean distclean-compile distclean-generic \
+       distclean-libtool distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-data \
+       install-data-am install-dvi install-dvi-am install-exec \
+       install-exec-am install-html install-html-am install-info \
+       install-info-am install-man install-pdf install-pdf-am \
+       install-ps install-ps-am install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-compile \
        mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-       tags-am uninstall uninstall-am
+       tags tags-am uninstall uninstall-am
 
 .PRECIOUS: Makefile
 
@@ -766,7 +926,8 @@ blank-%.img:
 # Make a (dummy) Fedora image.
 fedora.img: make-fedora-img.pl \
                fedora-journal.tar.xz \
-               fedora.db
+               fedora.db \
+               fedora-static-bin
        SRCDIR=$(srcdir) LAYOUT=partitions $(top_builddir)/run --test ./$<
 
 # Make a (dummy) Fedora image using md devices
@@ -774,7 +935,8 @@ fedora-md1.img fedora-md2.img: stamp-fedora-md.img
 
 stamp-fedora-md.img: make-fedora-img.pl \
                fedora-journal.tar.xz \
-               fedora.db
+               fedora.db \
+               fedora-static-bin
        rm -f $@
        SRCDIR=$(srcdir) LAYOUT=partitions-md $(top_builddir)/run --test ./$<
        touch $@
@@ -783,19 +945,22 @@ stamp-fedora-md.img: make-fedora-img.pl \
 # for root and home.
 fedora-btrfs.img: make-fedora-img.pl \
                fedora-journal.tar.xz \
-               fedora.db
+               fedora.db \
+               fedora-static-bin
        SRCDIR=$(srcdir) LAYOUT=btrfs $(top_builddir)/run --test ./$<
 
 # Make a (dummy) Fedora image with LUKS-on-LVM.
 fedora-luks-on-lvm.img: make-fedora-img.pl \
                fedora-journal.tar.xz \
-               fedora.db
+               fedora.db \
+               fedora-static-bin
        SRCDIR=$(srcdir) LAYOUT=luks-on-lvm $(top_builddir)/run --test ./$<
 
 # Make a (dummy) Fedora image with LVM-on-LUKS.
 fedora-lvm-on-luks.img: make-fedora-img.pl \
                fedora-journal.tar.xz \
-               fedora.db
+               fedora.db \
+               fedora-static-bin
        SRCDIR=$(srcdir) LAYOUT=lvm-on-luks $(top_builddir)/run --test ./$<
 
 # Make a (dummy) Debian image.
index be3a4f3ef8c829e35d455d5c4f61be61f4a09f94..decee50461a8fd8101abf8917bf5e886af04f737 100644 (file)
Binary files a/test-data/phony-guests/fedora-db.sql.xz and b/test-data/phony-guests/fedora-db.sql.xz differ
diff --git a/test-data/phony-guests/fedora.c b/test-data/phony-guests/fedora.c
new file mode 100644 (file)
index 0000000..c57fa57
--- /dev/null
@@ -0,0 +1,66 @@
+/* libguestfs test images
+ * Copyright (C) 2009-2023 Red Hat Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+/* This is "just enough" of a binary to look like RPM and dracut, as
+ * far as virt-v2v is concerned.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* NB: This is also defined in make-fedora-img.pl */
+#define KVER "5.19.0-0.rc1.14.fc37.x86_64"
+
+static const char *
+get_basename (const char *str)
+{
+  const char *ret = strrchr (str, '/');
+  return ret == NULL ? str : ret + 1;
+}
+
+int
+main (int argc, char *argv[])
+{
+  if (argc == 3 &&
+      strcmp (get_basename (argv[0]), "rpm") == 0 &&
+      strcmp (argv[1], "-ql") == 0 &&
+      strncmp (argv[2], "kernel-", 7) == 0) {
+    /* XXX These files and directories actually exist.  It would be
+     * better to list files in /boot and /lib/modules matching a
+     * pattern rather than hard-coding the list here, which duplicates
+     * information in make-fedora-img.pl.
+     */
+    printf ("/boot/vmlinuz-" KVER "\n");
+    printf ("/lib/modules/" KVER "\n");
+    printf ("/lib/modules/" KVER "/kernel\n");
+    printf ("/lib/modules/" KVER "/kernel/drivers\n");
+    printf ("/lib/modules/" KVER "/kernel/drivers/block\n");
+    printf ("/lib/modules/" KVER "/kernel/drivers/block/virtio_blk.ko\n");
+  }
+  else if (argc >= 1 &&
+           strcmp (get_basename (argv[0]), "dracut") == 0) {
+    // do nothing, pretend to rebuild the initramfs
+  }
+  else {
+    fprintf (stderr, "phony Fedora: unknown command\n");
+    exit (1);
+  }
+
+  exit (0);
+}
index 908f304019b812efdcfa39a7c38ec11271e31443..e62b2b90b03a9032085205ac83f1c4b8284521c0 100644 (file)
Binary files a/test-data/phony-guests/fedora.db and b/test-data/phony-guests/fedora.db differ
index 84d4742e900002df6eff7995a2dfebbb7a08a4a5..ffa7e0f100bf1c4654e44fe0c33baa6feda4d2c5 100755 (executable)
@@ -1,6 +1,6 @@
 #!/usr/bin/env perl
 # libguestfs
-# Copyright (C) 2010-2020 Red Hat Inc.
+# Copyright (C) 2010-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -225,7 +225,7 @@ EOF
     # Create the Volume Group on /dev/sda2.
     $g->pvcreate ('/dev/sda2');
     $g->vgcreate ('VG', ['/dev/sda2']);
-    $g->lvcreate ('Root', 'VG', 32);
+    $g->lvcreate ('Root', 'VG', 256);
     $g->lvcreate ('LV1',  'VG', 32);
     $g->lvcreate ('LV2',  'VG', 32);
     $g->lvcreate ('LV3',  'VG', 64);
@@ -264,7 +264,7 @@ sub init_lvm_root {
 
     $g->pvcreate ($rootdev);
     $g->vgcreate ('VG', [$rootdev]);
-    $g->lvcreate ('Root', 'VG', 32);
+    $g->lvcreate ('Root', 'VG', 256);
     $g->lvcreate ('LV1', 'VG', 32);
     $g->lvcreate ('LV2', 'VG', 32);
     $g->lvcreate ('LV3', 'VG', 64);
@@ -294,6 +294,7 @@ $g->mount ($bootdev, '/boot');
 $g->mkdir ('/bin');
 $g->mkdir ('/etc');
 $g->mkdir ('/etc/sysconfig');
+$g->mkdir ('/sbin');
 $g->mkdir ('/usr');
 $g->mkdir ('/usr/share');
 $g->mkdir ('/usr/share/zoneinfo');
@@ -330,8 +331,17 @@ $g->upload ($ENV{SRCDIR}.'/../binaries/bin-x86_64-dynamic', '/bin/ls');
 
 $g->tar_in ($ENV{SRCDIR}.'/fedora-journal.tar.xz', '/var/log/journal', compress => "xz");
 
+# NB: This is also defined in fedora.c
+my $kver = "5.19.0-0.rc1.14.fc37.x86_64";
 $g->mkdir ('/boot/grub');
-$g->touch ('/boot/grub/grub.conf');
+$g->write ('/boot/grub/grub.conf', <<EOF);
+title Fedora
+    root (hd0,0)
+    kernel /vmlinuz-$kver
+    initrd /initramfs-$kver.img
+EOF
+
+$g->touch ('/etc/modprobe.conf');
 
 # Test files.
 $g->write ('/etc/test1', 'abcdefg');
@@ -354,6 +364,20 @@ $g->ln_s ('/bin/test1', '/bin/test5');
 $g->mkfifo (0777, '/bin/test6');
 $g->mknod (0777, 10, 10, '/bin/test7');
 
+# Virt-v2v needs an RPM command, or at least something which acts
+# similarly, and also a dracut command.
+$g->upload ('fedora-static-bin', '/bin/rpm');
+$g->chmod (0777, '/bin/rpm');
+$g->upload ('fedora-static-bin', '/sbin/dracut');
+$g->chmod (0777, '/sbin/dracut');
+
+# Virt-v2v also needs a kernel, initrd and modules path.
+$g->touch ("/boot/vmlinuz-$kver");
+$g->touch ("/boot/initramfs-$kver.img");
+$g->mkdir_p ("/lib/modules/$kver/kernel/drivers/block");
+$g->upload ($ENV{SRCDIR}.'/../binaries/bin-x86_64-dynamic',
+            "/lib/modules/$kver/kernel/drivers/block/virtio_blk.ko");
+
 # Cleanup
 $g->shutdown ();
 $g->close ();
index 30908a918c118462a9503cf2795cbb6076d58bb7..16debd1293e3ce78feb182f71c6e985a11a172dd 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/bash -
 # libguestfs
-# Copyright (C) 2010-2020 Red Hat Inc.
+# Copyright (C) 2010-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index 3a23214201cddb238238b801c6b5460fc81d03e3..fdb114ab7538370c38472706fabf83613a83a2d1 100755 (executable)
Binary files a/test-data/phony-guests/windows-system and b/test-data/phony-guests/windows-system differ
index 5478d2def43cd7d701ad876674bb2cbbe9e9e2f7..be25199136c2a97240def1880b529d786f0ad68a 100644 (file)
 
 [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Tcpip\Parameters]
 "Hostname"=str(1):"windows.invalid"
+
+[HKEY_LOCAL_MACHINE\SYSTEM\DriverDatabase]
+
+[HKEY_LOCAL_MACHINE\SYSTEM\DriverDatabase\DeviceIds]
+
+[HKEY_LOCAL_MACHINE\SYSTEM\DriverDatabase\DeviceIds\PCI]
+
+[HKEY_LOCAL_MACHINE\SYSTEM\DriverDatabase\DeviceIds\PCI\CC_0101]
+"mshdc.inf"=hex(3):01,ff,00,00
+
+[HKEY_LOCAL_MACHINE\SYSTEM\DriverDatabase\DeviceIds\PCI\VEN_8086&DEV_0008]
+"machine.inf"=hex(3):01,ff,00,00
index afccfbbdb1c9c72d5f79b2b50096a579a3ae406e..4044912047afca7dd807746ccb19e982afd149f9 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/bash -
 # libguestfs
-# Copyright (C) 2014-2020 Red Hat Inc.
+# Copyright (C) 2014-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index 40f695193106439433030ac6c74d05e1946c156c..4c8e37886138a66dff1c4c5e89f5ab81ab8a7a13 100644 (file)
@@ -1,5 +1,5 @@
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index 61ec066adde8f6ba35a3d74badf480fddd0e3a26..7791979a5e13c57163a4e536ffbd7dc308f25f86 100644 (file)
@@ -1,5 +1,5 @@
 # libguestfs virt-* tools
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
index 7ad95eb64d3564ff227236978817a79707458edf..07f9a375c7b7c1c88757483514db130218d0761c 100644 (file)
@@ -15,7 +15,7 @@
 @SET_MAKE@
 
 # libguestfs virt-* tools
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -32,7 +32,7 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 # libguestfs
-# Copyright (C) 2009-2020 Red Hat Inc.
+# Copyright (C) 2009-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -251,7 +251,6 @@ EGREP = @EGREP@
 ETAGS = @ETAGS@
 EXEEXT = @EXEEXT@
 FGREP = @FGREP@
-FILECMD = @FILECMD@
 GCC_VISIBILITY_HIDDEN = @GCC_VISIBILITY_HIDDEN@
 GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
 GMSGFMT = @GMSGFMT@
@@ -280,6 +279,8 @@ LIBINTL = @LIBINTL@
 LIBLZMA_CFLAGS = @LIBLZMA_CFLAGS@
 LIBLZMA_LIBS = @LIBLZMA_LIBS@
 LIBOBJS = @LIBOBJS@
+LIBOSINFO_CFLAGS = @LIBOSINFO_CFLAGS@
+LIBOSINFO_LIBS = @LIBOSINFO_LIBS@
 LIBS = @LIBS@
 LIBTINFO_CFLAGS = @LIBTINFO_CFLAGS@
 LIBTINFO_LIBS = @LIBTINFO_LIBS@
@@ -350,6 +351,7 @@ PO4A_TRANSLATE = @PO4A_TRANSLATE@
 PODWRAPPER = @PODWRAPPER@
 POSUB = @POSUB@
 RANLIB = @RANLIB@
+REALPATH = @REALPATH@
 SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
index 6d9d0a28bee6cf0029a468312d73f275a0c83f03..4b34978465ac097b2ec74c4d36a29cc998755570 100755 (executable)
@@ -1,6 +1,6 @@
 #!/usr/bin/env perl
 # virt-win-reg
-# Copyright (C) 2010-2021 Red Hat Inc.
+# Copyright (C) 2010-2023 Red Hat Inc.
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by